supervisord 程式管家

weixin_30639719發表於2020-04-05

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

轉載於:https://www.cnblogs.com/mhc-fly/p/9933561.html

相關文章