python监听端口重启服务脚本

一、问题

之前遇到一个诡异的环境问题,有个项目,其中一个微服务经常会挂,服务器为windows系统,内存不大,设置jvm参数也没什么效果,陈年旧项,懒得多理,于是通过写个监听端口的脚本来重启服务。

二、解决

通过python运行系统命令,netstat -aon|findstr 端口号,查看端口是否占用,如果占用着,说明服务没挂,不做处理,sleep设置的时间,然后再重新运行查看端口占用命令;如果没占用,说明服务挂了,重新运行启动脚本,xxxx.bat,启动服务。
依赖包:
os(windows命令)
time(定时)

代码:

######################
# 根据端口自动重启脚本~ #
######################
import os
import time

port = input("\n>>>请输入端口: \n")
# C:/Users/syp1293/Desktop/configfile/center.bat
bat_path = input("\n>>>请输入bat文件路径: \n")
time_u = input("\n>>>请输入间隔时间: \n")
while True:
    with os.popen('netstat -aon|findstr "' + port + '"') as res:
        res = res.read().split('\n')
    result = []
    if res[0] == '':
        # 不存在端口占用,启动服务
        os.system('start ' + bat_path)
        time.sleep(120)
        continue
    else:
        for line in res:
            # print(line)
            temp = [i for i in line.split(' ') if i != '']
            if len(temp) > 4:
                #  result.append({'pid': temp[4], 'address': temp[1], 'state': temp[3]})
                print('PID:', temp[4])
    # print('sleeping...')
    time.sleep(int(time_u))

三、打包

生成exe文件,并且启动后显示为命令行。

pyinstaller -F osport.py

四、效果

输入端口号
输入要启动的bat脚本路径
然后就开始监听了,比较简单,可以自测。

好的,这是一个稍微复杂一点的需求,你需要使用 Python 的 socket 模块来检测端口是否正常监听,使用 subprocess 模块来启动和杀死进程。以下是一个简单的实现: ```python import socket import subprocess import time # 要监控的端口列表 port_list = [8000, 8080, 9000] # 要监控的程序的文件名和启动命令 program_file = "your_program.py" program_command = f"python {program_file}" # 启动程序的函数 def start_program(): return subprocess.Popen(program_command) # 杀死程序的函数 def kill_program(process): process.kill() # 检查端口是否正常监听的函数 def is_port_open(port): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: return s.connect_ex(('localhost', port)) == 0 # 监控程序的主循环 while True: # 启动程序 program = start_program() # 检查程序是否正常执行 while program.poll() is None: # 检查端口是否正常监听 for port in port_list: if not is_port_open(port): # 端口未正常监听,杀死程序并重启 print(f"端口 {port} 未正常监听,杀死进程并重启...") kill_program(program) time.sleep(5) program = start_program() break # 等待一段时间后重新检查 time.sleep(10) # 程序异常退出,重启程序 print("程序异常退出,5秒钟后重启...") time.sleep(5) ``` 你可以将上面的代码保存为一个名为 `monitor.py` 的脚本,并将 `your_program.py` 替换为你要监控的程序的文件名。然后在终端中运行 `python monitor.py` 即可启动监控程序。当你的程序异常退出或任意一个监控的端口未正常监听时,监控程序会自动杀死进程并重启程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值