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