三板斧落地——如何优雅地自动监测和重启程序代码

假如你打算在服务器上部署一段程序,同时希望能够自动监测程序是否在持续正常运行,并且当服务宕机时能够实现自动重启服务,而不是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)

核心三板斧下去,看哪个程序还敢随随便便宕机!!!
如果还有,你跟我说,就当我啥都没说过~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值