Supervisor的作用與配置
阿新 • • 發佈:2018-12-10
supervisor管理程序,是通過fork/exec的方式將這些被管理的程序當作supervisor的子程序來啟動,所以我們只需要將要管理程序的可執行檔案的路徑新增到supervisor的配置檔案中就好了。此時被管理程序被視為supervisor的子程序,若該子程序異常中斷,則父程序可以準確的獲取子程序異常中斷的資訊,通過在配置檔案中設定autostart=ture,可以實現對異常中斷的子程序的自動重啟。
安裝supervisor
$ sudo apt-get install supervisor
配置檔案
安裝完supervisor後,輸入以下命令可得到配置檔案:
$ echo_supervisord_conf
或者:
$ cat /etc/supervisord/supervisord.conf
配置檔案如下(分號;表示註釋):
; supervisor config file [unix_http_server] file=/var/run/supervisor.sock ; (the path to the socket file) chmod=0700 ; sockef file mode (default 0700) [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) ; 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:///var/run/supervisor.sock ; use a unix:// URL for a unix socket ; The [include] section can just contain the "files" setting. This ; setting can list multiple files (separated by whitespace or ; newlines). It can also contain wildcards. The filenames are ; interpreted as relative to this file. Included files *cannot* ; include files themselves. [include] files = /etc/supervisor/conf.d/*.conf
以上配置檔案用到幾個部分:
- [unix_http_server]:這部分設定HTTP伺服器監聽的UNIX domain socket
- file: 指向UNIX domain socket,即file=/var/run/supervisor.sock
- chmod:啟動時改變supervisor.sock的許可權
- [supervisord]:與supervisord有關的全域性配置需要在這部分設定
- logfile: 指向記錄supervisord程序的log檔案
- pidfile:pidfile儲存子程序的路徑
- childlogdir:子程序log目錄設為AUTO的log目錄
- [supervisorctl]:
- serverurl:進入supervisord的URL, 對於UNIX domain sockets, 應設為 unix:///absolute/path/to/file.sock
- [include]:如果配置檔案包含該部分,則該部分必須包含一個files鍵:
- files:包含一個或多個檔案,這裡包含了/etc/supervisor/conf.d/目錄下所有的.conf檔案,可以在該目錄下增加我們自己的配置檔案,在該配置檔案中增加[program:x]部分,用來執行我們自己的程式,如下:
- [program:x]:配置檔案必須包括至少一個program,x是program名稱,必須寫上,不能為空
- command:包含一個命令,當這個program啟動時執行
- directory:執行子程序時supervisord暫時切換到該目錄
- user:賬戶名
- startsecs:程序從STARING狀態轉換到RUNNING狀態program所需要保持執行的時間(單位:秒)
- redirect_stderr:如果是true,則程序的stderr輸出被髮送回其stdout檔案描述符上的supervisord
- stdout_logfile:將程序stdout輸出到指定檔案
- stdout_logfile_maxbytes:stdout_logfile指定日誌檔案最大位元組數,預設為50MB,可以加KB、MB或GB等單位
- stdout_logfile_backups:要儲存的stdout_logfile備份的數量
示例如下,在目錄/etc/supervisor/conf.d/下建立awesome.conf,並加入:
;/etc/supervisor/conf.d/awesome.conf
[program:awesome]
command = /usr/bin/env python3 /srv/awesome/www/app.py
directory = /srv/awesome/www
user = www-data
startsecs = 3
redirect_stderr = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups = 10
stdout_logfile = /srv/awesome/log/app.log
配置完後,先進入/srv/awesome/目錄下建立log目錄,之後啟動supervisor:
$ sudo supervisord -c supervisor.conf
supervisor基本命令(後四個命令可以省略“-c supervisor.conf”):
supervisord -c supervisor.conf 通過配置檔案啟動supervisor
supervisorctl -c supervisor.conf status 檢視狀態
supervisorctl -c supervisor.conf reload 重新載入配置檔案
supervisorctl -c supervisor.conf start [all]|[x] 啟動所有/指定的程式程序
supervisorctl -c supervisor.conf stop [all]|[x] 關閉所有/指定的程式程序
執行服務(執行app.py):
$ sudo supervisorctl start awesome
如果supervisor遇到錯誤,可以在/var/log/supervisor/supervisord.log中檢視日誌; 如果app執行出現問題,可以在/srv/awesome/log/app.log中檢視日誌。
作者:涵仔睡覺 連結:https://www.jianshu.com/p/0226b7c59ae2 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。