Supervisor實現程序守護
在開發過程中經常需要server時候執行在cloud上。這裡介紹一個比較好的工具實現這種需求。
Supervisor是一個用 Python 寫的程序管理工具,可以很方便的用來啟動、重啟、關閉程序。
以守護nginx為例
環境:ubuntu
執行Supervisor需要root許可權
官方文件:http://www.supervisord.org
1 安裝Supervisor
apt-get install supervisor
安裝完成後我們可以在/etc/supervisor/找到Supervisor
2 supervisord 配置
/etc/supervisor/supervisord.conf 即為Supervisor配置檔案.
我們編寫該配置檔案啟動Supervisor即可以對特定程序進行守護:
vi /etc/supervisor/supervisord.conf
配置檔案中註釋是用冒號註釋;
[include]
files = /etc/supervisor/conf.d/*.conf
我們在[include]後面新增新program
program相關引數說明:
[program:nginx] nginx為我們定義程序名,
directory=/home/ubuntu/webvideo/nginx 待守護程式所在根目錄
command=/home/ubuntu/webvideo/nginx/sbin/nginx -g ‘daemon off;’ 啟動程式命令
autostart =true 在 supervisord 啟動的時候也自動啟動
startsecs=5 啟動 5 秒後沒有異常退出,就當作已經正常啟動了
autorestart =true 程式異常退出後自動重啟
startretries=3 啟動失敗自動重試次數,預設是 3
user=ubuntu 用哪個使用者啟動
redirect_stderr=true 把 stderr 重定向到 stdout,預設 false,用於儲存程式輸出作為log
stdout_logfile_maxbytes=20MB stdout 日誌檔案大小,預設 50MB
stdout_logfile_backups=20 stdout 日誌檔案備份數,即一個log寫滿後會接這開一個log往下寫
stdout_logfile =/home/ubuntu/webvideo/nginx/logs/nginx_stdout.loglog儲存路徑
sample:
[program:nginx]
directory=/home/ubuntu/webvideo/nginx
command=/home/ubuntu/webvideo/nginx/sbin/nginx -g 'daemon off;'
autostart=true
startsecs=3
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
stdout_logfile = /home/ubuntu/webvideo/nginx/logs/nginx_stdout.log
[program:x] 其中x使我們定義程序名,我們可以在 supervisorctl 中通過這個值來對程式進行 start、restart、stop 等操作。
Nginx 使用nginx -g ‘daemon off;’ 命令將nginx執行在前臺,因為supervisord 無法監控後臺程序。
3 啟動supervisord
sudo supervisord -c /etc/supervisor/supervisord.conf
ps aux | grep supervisord 我們可以用這條命令看supervisord 是否已經啟動
netstat -ntl可以檢視端口占用情況
4 supervisord 常用操作
以下命令均需要root許可權
supervisorctl status #檢視守護程式狀態
supervisorctl stop nginx #停止nginx
supervisorctl start nginx #啟動nginx
supervisorctl restart nginx #重啟 nginx 程式
supervisorctl reread #讀取有更新(增加)的配置檔案,但不會啟動新新增的程式
supervisorctl update #重啟配置檔案修改過的程式
更新了配置檔案需要update一下 才能生效
5 supervisord 程序狀態
STOPPED (0) 程序已停止
STARTING (10) 該程序由於啟動請求而開始。
RUNNING (20) 該過程正在執行。
BACKOFF (30)該過程進入“ 啟動”狀態,但隨後退出的速度太快而無法移至“ 執行”狀態。 前面有startsecs 這個引數設定
STOPPING (40) 由於停止請求,該程序正在停止。
EXITED (100)該程序從RUNNING狀態退出(預期或意外)。
FATAL (200)該過程無法成功啟動。
UNKNOWN (1000)該程序處於未知狀態(supervisord 程式設計錯誤)。