supervisor 子进程退出_用supervisor监管你的程序,不用担心程序挂了
1.背景
無論多么優秀的程序員都難以避免寫出來的程序會有崩潰的一天,特別是c、c++這種高技術含量的語言,一不小心就來個段錯誤(segment fault),我們通常會寫一個守護進程或者守護腳本,檢測對應的進程是否退出,如果發現目標進程退出了,就馬上在fork或者啟動一個新的,這樣的檢測邏輯不復雜,簡單幾行代碼即可,但是如果你要檢查的程序有很多個,用不同的語言編寫等等,就比較繁瑣了。
2.supervisor安裝
今天給大家介紹的這個工具叫supervisor,看名字就知道是一個專門給管理員用的,這個工具非常強大,今天我們只做一個簡單而實用的介紹,就是實現用supervisor監管你的程序服務,當程序服務異常退出了,它幫你自動再開啟一個新的。
#supervisor的安裝很簡單,我們這里以Ubuntu16為例#apt一下即可,別忘了安裝之前要update一下apt install -y supervisor#一切順利之后,你會看到supervisor的服務和對應配置文件信息service supervisor statusls /etc/supervisor/3.supervisor實戰
我們以一個python服務為例子,先看看這個例子的代碼如下
#!/usr/bin/env python# test.py# 如果還沒裝webpy的,先去webpy官網看安裝教程,比較簡單# http://webpy.org/import weburls = ('/', 'index')class index:def GET(self):return "Hello, world!"if __name__ == "__main__":app = web.application(urls, globals())app.run()這是一個用python webpy框架做的一個簡單的http服務程序,監聽了8080端口提供http服務,使用命令 python test.py 運行即可。
下面我們開始配置supervisor,監控上面我們做的這個簡單的程序服務 test.py。在supervisor的配置目錄 /etc/supervisor/conf.d 下面創建一個 test_python.conf 的文件。/etc/supervisor/conf.d 這個目錄是supervisor用來給配置不同監管用的配置文件夾,supervisor服務會包含這個目錄下面所有的conf配置文件,并識別里面的內容對其進程服務進行監管。下面我們看看我們這個 test_python.conf配置內容如下
#監控服務名稱,這個自己起一個名字即可[program:test_python]#指定進程的目錄,這里我們是在/tmp創建的,為了演示directory = /tmp#程序啟動參數,這個比較簡單,用python運行command = python test.py#是否跟隨supervisord的啟動而啟動,我們設置了true是autostart=true#程序退出后自動重啟,選擇true是autorestart=true#進程被殺死時,是否向這個進程組發送stop信號,包括子進程,選擇true是stopasgroup=true#向進程組發送kill信號,包括子進程,選擇true是killasgroup=true#下面這幾行是日志文件和日志大小和備份個數stdout_logfile=/var/log/test_python.logstdout_logfile_maxbytes = 50MBstdout_logfile_backups = 10配置內容比較簡單明了,配置完之后,我們重啟一下supervisor服務,service supervisor restart,一切順利之后再用 service supervisor status看看服務運行狀態。當supervisor服務重啟后,它會發現 test.py 進程沒有起來,然后就開啟了 test.py 進程。
ps -ef|grep-v grep|grep test.pyroot 27314 27284 0 10:10 ? 00:00:00 python test.py#把進程kill掉,模擬進程崩潰退出kill -9 27314#再看看程序有沒有被重新開起來ps -ef|grep -v grep|grep test.pyroot 27483 27284 4 10:45 ? 00:00:00 python test.py#可以看到進程號已經變了是 27483,證明程序是新啟動不是舊的睿江云官網鏈接:睿江云主機租用-云服務器-支持免費測試-國內專業的云主機提供商
總結
以上是生活随笔為你收集整理的supervisor 子进程退出_用supervisor监管你的程序,不用担心程序挂了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决神经网络过拟合问题—Dropout方
- 下一篇: zigbee上位机通过vs2019的mf