使用 supervisor 管理進(jìn)程
Supervisor是一個(gè)用 Python寫的進(jìn)程管理工具,可以很方便的用來啟動(dòng)、重啟、關(guān)閉進(jìn)程。除了對單個(gè)進(jìn)程的控制,還可以同時(shí)啟動(dòng)、關(guān)閉多個(gè)進(jìn)程,可以很方便的控制那些需要長期運(yùn)行的進(jìn)程,比如需要在服務(wù)器上長期運(yùn)行的爬蟲之類,會(huì)在程序出錯(cuò)以后自動(dòng)重啟。
1.安裝
ubuntu下apt安裝
sudo apt install supervisor
pip安裝方式
sudo pip install supervisor
2.配置
創(chuàng)建配置文件
supervisor提供了一個(gè)快速產(chǎn)生配置文件的方法
echo_supervisord_conf > /etc/supervisord.conf
如果沒有root權(quán)限可以使用
echo_supervisord_conf > supervisord.conf
在當(dāng)前目錄產(chǎn)生,然后用supervisor -c supervisord.conf來啟動(dòng)服務(wù)
查看 supervisord 是否在運(yùn)行:
ps -aux | grep supervisord
3.應(yīng)用配置
至此,supervisor已經(jīng)安裝完成,下面需要將應(yīng)用添加進(jìn)去,可以在剛剛的生成文件中直接添加命令,但是不推薦這么做,推薦使用以下的做法。
在supervisor.conf中取消注釋掉以下命令(一般位于結(jié)尾)
;[include]
;files = relative/directory/*.ini
改為
[include]
files = /etc/supervisor/*.ini
在/etc目錄下創(chuàng)建supervisor文件夾,在其下建立program.ini
[program:serialrecv]
directory = /home/jiang/program ; 程序的啟動(dòng)目錄
command = python serialrecv.py ; 運(yùn)行的指令
autostart = true ; 在 supervisord 啟動(dòng)的時(shí)候也自動(dòng)啟動(dòng)
startsecs = 5 ; 啟動(dòng) 5 秒后沒有異常退出,就當(dāng)作已經(jīng)正常啟動(dòng)了
autorestart = true ; 程序異常退出后自動(dòng)重啟
startretries = 3 ; 啟動(dòng)失敗自動(dòng)重試次數(shù),默認(rèn)是 3
user = root ; 用哪個(gè)用戶啟動(dòng)
redirect_stderr = true ; 把 stderr 重定向到 stdout,默認(rèn) false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默認(rèn) 50MB
stdout_logfile_backups = 20 ; stdout 日志文件備份數(shù)
; stdout 日志文件,需要注意當(dāng)指定目錄不存在時(shí)無法正常啟動(dòng),所以需要手動(dòng)創(chuàng)建目錄(supervisord 會(huì)自動(dòng)創(chuàng)建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
; 可以通過 environment 來添加需要的環(huán)境變量,一種常見的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
啟動(dòng)supervisor
sudo supervisord
監(jiān)控應(yīng)用運(yùn)行情況
sudo supervisorctl
顯示如下界面
supdervisor>
運(yùn)行status可以看到應(yīng)用運(yùn)行狀態(tài),start <program name>可以啟動(dòng)應(yīng)用,stop <program name>停止應(yīng)用,start all和stop all可以啟動(dòng)和停止所有應(yīng)用。
4.問題
1.可能會(huì)遇到unix:///tmp/supervisor.sock not found,重新啟動(dòng)supervisordsudo supervisord即可
2.無法開機(jī)啟動(dòng)
在/etc/rc.local添加啟動(dòng)命令sudo supervisord于exit 0之前即可。