假如你打算在服务器上部署一段程序,同时希望能够自动监测程序是否在持续正常运行,并且当服务宕机时能够实现自动重启服务,而不是24小时盯着服务器的反馈来手动来排查。
那么应该怎么办呢??!!
方法当然有!Let’s go!
解决思路
本人在部署一个算法服务时,测试阶段莫名其妙地出现了服务宕机的现象(鉴于反复排查,始终未能确认服务宕机的根本原因),而只要重启服务,一切又恢复了正常。为了不耽误正常业务的上线,只能退而求其次:就是用代码自动监测服务的运行状态。当发现服务宕机时,自动重启服务。
思路当然很清晰,但是具体实现办法呢?
‘Talk is cheap, show me the code!!!’
为了解决这类问题,本人站在前人的肩膀上,总结了问题解决的核心三板斧:
第一斧:向主程序发送请求,判断程序的状态
def get_response():
res = None
try:
res = requests.post('访问地址',json={"data":'''请求信息'''})
except:
pass
return res
需要运行一段程序,持续向主程序发送请求(本人主程序为flask程序代码,需要提交POST请求,根据是否正常反馈来判断主程序是否宕机)
第二斧:当主程序宕机时,杀死进程
def kill():
# os.popen获取主程序进程端口号信息
a = os.popen('netstat -aon|findstr "进程端口号"')
text = a.read()
id = text.split('\n')
for i in id:
if 'LISTENING' in i:
# 获取端口号值
pid = i.split()[-1]
# 杀死主程序端口号的进程
a = os.popen('taskkill /f /pid %s' % (pid))
第三斧:杀死进程后,重启主程序
# 为了实现持续监测主程序的目的,需要执行死循环
while True:
try:
cmd = r'd:&&cd 主程序所在位置&&start /b python 主程序所在位置/主程序文件名'
a = os.popen(cmd)
print(a.read())
print('****************')
# 爱睡几秒睡几秒
time.sleep(2)
except Exception as e:
print(e)
核心三板斧下去,看哪个程序还敢随随便便宕机!!!
如果还有,你跟我说,就当我啥都没说过~~~~~