一、簡介
Supervisor 是一款 Python 開發的程式管理系統,允許使用者監視和控制 Linux 上的程式,能將一個普通命令列程式變為後臺守護程式,異常退出時能自動重啟
詳細介紹查閱:Supervisor Introduction
二、安裝
Supervisor 支援 Linux 和 Mac,不支援 Windows
本文系統為: centos,supervisor==4.2.4
pip3 install supervisor
安裝完成後,在Python bin目錄
下面會有這樣幾個檔案。
ls /usr/local/Python38/bin
echo_supervisord_conf
supervisorctl
supervisord
注:由於python bin目錄是加入了環境變數,所以可以直接執行這幾個檔案。
三、建立配置檔案
- 首先建個目錄,存放配置檔案:
mkdir supervisord
。
echo_supervisord_conf > supervisord/supervisord.conf
若報錯 -bash: /etc/supervisord.conf: Permission denied,需要切換到 root使用者。
- 建立子程式配置檔案路徑
mkdir -p supervisor/conf.d
後面我們的任務,我們想把它作為守護程式,都需要一個配置檔案,我們把這些配置檔案放在conf.d目錄下面。
- 修改配置檔案
vim supervisord/supervisord.conf
將最後一部分改為
[include]
# 因為我這裡是放在root使用者目錄下,也可以放其它目錄
files=/root/supervisord/conf.d/*.conf
四、初試
- 啟動 supervisord
supervisord -c supervisord/supervisord.conf
這樣就把supervisord
啟動了,我們接下來可以把我們的任務交給他去守護了,停止了會幫我們自動重啟。
檢視版本
supervisord -v
- 編寫簡單的 Shell 指令碼
vim supervisord/test.sh
內容如下
#!/bin/bash
while :
do
echo `date '+%Y-%m-%d %H:%m:%S'`
sleep 1
done
簡單執行,Ctrl + C
退出
- 建立子程式配置檔案
vim supervisor/conf.d/test.conf
test.conf
內容如下:
[program:test]
command=sh /root/supervisord/test.sh
priority=999 ; 相對啟動優先順序,數值越小越優先,預設為999
autostart=true ; 在supervisor啟動時自動啟動,預設為true
autorestart=true ; 在意外退出時重新啟動,預設為true
startsecs=10 ; 子程式啟動多少秒後狀態為running則認為啟動成功,預設為1
startretries=3 ; 嘗試啟動的最大次數,預設為3
exitcodes=0,2 ; 程式的預期退出程式碼列表,預設為0
stopsignal=QUIT ; 終止程式的訊號,預設為TERM
stopwaitsecs=10 ; 在SIGKILL之前等待的最大秒數,預設為10
user=root ; 在某使用者下設定uid來啟動程式,預設不切換使用者
redirect_stderr=true ; 是否重定向stdout和stderr,預設為false
stdout_logfile=/tmp/supervisor.stdout.log ; stdout的輸出檔案,預設為AUTO
stdout_logfile_maxbytes=50MB ; stdout最大檔案大小,預設為50MB
stdout_logfile_backups=10 ; stdout檔案備份數,設為0則不備份,預設為10
其實只需要配置3個引數,其它不用管:
command=sh /root/supervisord/test.sh
: 我們的子程式啟動命令;stdout_logfile=/tmp/supervisor.stdout.log
: 日誌;program:test
:程式名為test
,如果程式哪一天想停止啟動等,需要程式名;
目前檔案目錄結構是這樣的:
yum install tree
tree supervisord
supervisord
├── conf.d
│ └── test.conf
├── supervisord.conf
└── test.sh
- 重新讀取配置並更新子程式
因為我們的supervisord
已經啟動了,可以通過ps -ef | grep supervisord.conf
檢視。新增了子程式配置檔案,需要把它重新載入進來:
先進入supervisord
目錄: cd supervisord
,否則執行下面命令會有問題。
supervisorctl reread
再次檢視程式狀態
supervisorctl status
結果:
test RUNNING pid 30278, uptime 1:29:41
名為test
的這個程式已經作為守護程式在後臺執行,我們來kill掉他:
kill 30278
再執行supervisorctl status
,會發現狀態立馬由starting
,不一會變成running
,那麼supervisord
的作用已經很明顯了,可以自動幫我們自動監控任務。
注:對於子程式的新增、刪除、啟動、停止相關命令,見附錄。
五、Web 介面
web介面沒多大用處,就是如果想啟動、暫停程式是,不需要敲命令而已。
vim supervisord.conf
取消註釋
[inet_http_server]
port=*:9001 ; 此處改為*便於除錯
重啟 supervisord
supervisorctl reload
瀏覽器訪問:linux_ip:9001.
附錄:supervisorctl 常用命令
新增某配置檔案,重新載入
supervisorctl reread
改動某配置檔案,重新載入
supervisorctl update
重啟 supervisord
supervisorctl reload
檢視所有程式狀態
supervisorctl status
檢視指定程式狀態
supervisorctl status <name>
啟動所有子程式
supervisorctl start all
啟動指定子程式
supervisorctl start <name>
重啟所有子程式
supervisorctl restart all
重啟指定子程式
supervisorctl restart <name>
停止所有子程式
supervisorctl stop all
停止指定子程式
supervisorctl stop <name>
新增子程式到程式組
supervisorctl add <name>
從程式組移除子程式,需要先stop。注意:移除後,需要使用reread和update才能重新執行該程式
supervisorctl reomve <name>
歡迎訪問我的個人部落格,聽聽我的故事。