s
supervisor
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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。