一、问题
之前遇到一个诡异的环境问题,有个项目,其中一个微服务经常会挂,服务器为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脚本路径
然后就开始监听了,比较简单,可以自测。