Supervisor 筆記
分類
說明
Supervisor 是一個客戶端/伺服器系統,可讓使用者控制類 UNIX 作業系統上的多個程序。
本篇會紀錄一些常用的指令和配置,讓開發人員可以快速上手。
安裝
在官方文件中,它建議使用 python 套件安裝。
$ pip install supervisor
運作機制
我是採用一個 supervisord 配置檔,以及多個 program 配置檔的方式建立,多個 program 配置檔需要 supervisord 配置檔配置 [include]
supervisord.conf
[include]
files = /etc/supervisor/conf.d/*.conf
如上範例,將要啟動的程式都寫在 /etc/supervisor/conf.d/
目錄裡,目錄位置請自行調整。
系統會啟動一個 supervisord,接著再執行 conf.d/*conf
所有的程式。
建立配置檔
$ echo_supervisord_conf
將「範例」Supervisor 配置檔輸出到終端。
$ echo_supervisord_conf > /etc/supervisord.conf
將「範例」Supervisor 配置檔寫入到 /etc/supervisord.conf
,此位置為官方建議,如果您沒有 root 存取權限,這將無法運行。
$ echo_supervisord_conf > supervisord.conf
如果您沒有 root 存取權限,或者您不想將 supervisord.conf
檔案放入 /etc/supervisord.conf
中,則可以將其放入目前目錄,並使用 -c
標誌啟動 supervisord 以指定配置文件位置。
supervisord 配置檔
此範例為 linux 安裝 supervisor 時自動產生的配置檔,除了 [inet_http_server]
是我自己新增的之外。
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
; 網頁版 UI 操作
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
program 配置檔
這裡列出幾項常用的配置項目
;[program:theprogramname]
;command=/bin/cat ; the program (relative uses PATH, can take args)
;directory=/tmp ; directory to cwd to before exec (def no cwd)
;autostart=true ; start at supervisord start (default: true)
;autorestart=unexpected ; when to restart if exited after running (def: unexpected)
;user=chrism ; setuid to this UNIX account to run the program
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
- theprogramname: 程式名稱,可自定義
- command: 啟動的指令
- directory: 切換當前目錄位置
- autostart: 啟動 supervisord 時自動啟動
- autorestart: 程序結束自動重新啟動
- user: 以哪個使用者身分啟動(只有用 root 啟動 supervisord 才能設定,因為權限不能低於指定的 user)
- stdout_logfile: 標準輸出記錄檔
- stderr_logfile: 標準錯誤輸出記錄檔
supervisord 命令
說明
以守護程序執行一組應用程式。
使用
$ supervisord [options]
選項
-c FILE
, --configuration=FILE
Supervisord 配置檔的路徑。
範例
$ supervisord -c supervisord.conf
啟動 supervisor,讀取當前資料夾底下的 supervisord.conf
。
supervisorctl 命令
從終端控制 supervisord 運行的應用程式。
使用
$ supervisorctl [options] [action [arguments]]
動作
pid
取得 supervisord 的 PID。
reload
重新啟動遠端 supervisord。
reread
重新載入守護程序的配置文件,無需新增/刪除(無需重新啟動)。
restart <gname>:*
重新啟動群組中的所有進程,請注意:重新啟動不會重新讀取設定檔。為此,請參閱 reread
和 update
。
restart <name>
重新啟動進程,請注意:重新啟動不會重新讀取設定檔。為此,請參閱 reread
和 update
。
start <name>
啟動一個程序
status
取得所有程序狀態資訊。
update
重新載入配置並根據需要添加/刪除,並將重新啟動受影響的程序。
取得 process id
找到設定檔的 [supervisord]
部分,pidfile
存放 process id。
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
如上,打開 /tmp/supervisord.pid
,查看 process id。
訊號處理
使用 kill
命令,對 Supervisord 程序進行處理。
訊號
SIGHUP
Supervisord 將停止所有程序,從它找到的第一個設定檔重新載入配置,然後啟動所有程序。
SIGTERM
Supervisord 及其所有子程序將關閉。這可能需要幾秒鐘。
範例
假設 process id 是 12345
$ kill -s SIGTERM 12345
關閉 Supervisord。
$ kill -s SIGHUP 12345
重新啟動 Supervisord。
參考
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!