三板斧落地——如何優雅地自動監測和重啓程序代碼

假如你打算在服務器上部署一段程序,同時希望能夠自動監測程序是否在持續正常運行,並且當服務宕機時能夠實現自動重啓服務,而不是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)

核心三板斧下去,看哪個程序還敢隨隨便便宕機!!!
如果還有,你跟我說,就當我啥都沒說過~~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章