簡介
-
supervisor是一種客戶端/服務端系統,使用者可以使用supervisor控制在類UNIX系統下執行的諸多程式
-
並且具有易用,高效,可擴充套件等諸多特性
-
supervisor包含supervisord伺服器元件和supervisorctl客戶端元件
安裝
-
pip安裝
pip install supervisor
如果pip需要系統許可權請在命令前加上sudo
-
驗證安裝
輸入以下命令,如果出現配置資訊的話,安裝應該成功了echo_supervisord_conf
使用
- 例子引入
假設你有一個程式,名為A。以前的時候你只是在特定的檔案路徑下(/Users/joey/A_dir)終端透過命令啟動如下程式:
Istart A
這時候A程式就在後臺奔跑著。
但是這裡存在一個問題,開啟A程式的終端必須Alive,如果關閉程式或者掛機了,那麼A程式也就關閉了
於是你想著有沒有一種工具,可以幫你開啟A程式,並且不會佔用終端,且即便關閉了當前的終端A也能愉快的奔跑呢?
當你看到這篇文章時,你可能找到了一個可選項了:
supervisor!!!
- supervisord服務元件配置
在你成功安裝了supervisor之後,你得先初始化服務元件supervisord的配置檔案
sudo touch /etc/supervisord.conf
上述命令建立配置檔案
sudo echo_supervisord_conf > /etc/supervisord.conf
上述命令將檔案內容匯入supervisord的配置檔案中
接下來我們來看看supervisord.conf的檔案內容
[unix_http_server]
file=/tmp/supervisor.sock ; UNIX socket 檔案,supervisorctl 會使用
;chmod=0700 ; socket 檔案的 mode,預設是 0700
;chown=nobody:nogroup ; socket 檔案的 owner,格式: uid:gid
;[inet_http_server] ; HTTP 伺服器,提供 web 管理介面
;port=127.0.0.1:9001 ; Web 管理後臺執行的 IP 和埠,如果開放到公網,需要注意安全性
;username=user ; 登入管理後臺的使用者名稱
;password=123 ; 登入管理後臺的密碼
[supervisord]
logfile=/tmp/supervisord.log ; 日誌檔案,預設是 $CWD/supervisord.log
logfile_maxbytes=50MB ; 日誌檔案大小,超出會 rotate,預設 50MB
logfile_backups=10 ; 日誌檔案保留備份數量預設 10
loglevel=info ; 日誌級別,預設 info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; pid 檔案
nodaemon=false ; 是否在前臺啟動,預設是 false,即以 daemon 的方式啟動
minfds=1024 ; 可以開啟的檔案描述符的最小值,預設 1024
minprocs=200 ; 可以開啟的程式數的最小值,預設 200
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 透過 UNIX socket 連線 supervisord,路徑與 unix_http_server 部分的 file 一致
;serverurl=http://127.0.0.1:9001 ; 透過 HTTP 的方式連線 supervisord
; 包含其他的配置檔案
;[include]
;files = relative/directory/*.ini ; 可以是 *.conf 或 *.ini
";"是註釋符,我們將supervisord.conf檔案最下端的[include]前面的";"去掉,並將下面一句改為
file = /etc/supervisor/conf/*.conf
至此,我們完成了服務元件的配置,當我們執行服務元件時,supervisor會到我們上面設定的file路徑尋找程式的配置檔案
- 編寫A程式配置檔案
使用以下命令建立/etc/supervisor資料夾
sudo mkdir /etc/supervisor/conf
建立A.conf配置檔案
sudo vi /etc/supervisor/conf/A.conf
在A.conf輸入以下內容:
[program:A]
directory = /Users/joey/A_dir ; 程式的啟動目錄
command = Istart A ; 啟動命令,如果你想執行該目錄下的檔案,建議使用絕對路徑
autostart = flase ; 在 supervisord 啟動的時候是否自動啟動
startsecs = 5 ; 啟動 5 秒後沒有異常退出,就當作已經正常啟動了
autorestart = true ; 程式異常退出後自動重啟
startretries = 3 ; 啟動失敗自動重試次數,預設是 3
user = leon ; 用哪個使用者啟動
redirect_stderr = true ; 把 stderr 重定向到 stdout,預設 false
stdout_logfile_maxbytes = 20MB ; stdout 日誌檔案大小,預設 50MB
stdout_logfile_backups = 20 ; stdout 日誌檔案備份數
; stdout 日誌檔案,需要注意當指定目錄不存在時無法正常啟動,所以需要手動建立目錄(supervisord 會自動建立日誌檔案)
stdout_logfile = /etc/supervisor/logs/A.log
stopasgroup = true
killasgroup = true ;當主程式退出來,殺死相應的子程式
需要注意的是[program A]中的A是接下來啟動程式的標誌,具有唯一性
建立A程式的日誌檔案
sudo mkdir /etc/supervisor/logs
sudo touch /etc/supervisor/logs/A.log
- 啟動supervisord服務元件
透過supervisord配置檔案啟動
supervisord -c /etc/supervisord.conf
可以透過ps命令是否成功啟動
ps aux | grep supervisor
- supervisorctl客戶元件
當supervisord服務元件啟動後,我們可以使用supervisorctl客戶元件是來管理A程式
包括啟動,關閉,重新啟動,檢視當前狀態等。
我們可以使用以下命令啟動客戶端元件
supervisorctl -c /etc/supervisord.conf
進入客戶端程式後,我們可以使用start啟動程式A
start A
當你想重新啟動時可以
restart A
使用status可以檢視程式狀態
status
使用stop命令來關閉程式
stop A
如果你想以配置檔案的形式啟動A,那麼你可以修改/etc/supervisor/A.conf中的內容
command = Istart A -c /fileroute/filename
接下來回到supervisorctl中使用update命令重新載入程式檔案
update
然後重新啟動
restart A
關於A程式的執行內容,你可以透過檢視日誌獲知
tail -f /etc/supervisor/logs/A.log
參考文章
本作品採用《CC 協議》,轉載必須註明作者和本文連結