天天看點

Supervisor使用小記安裝預設配置檔案在/etc/supervisor/supervisord.conf添加一個程式啟動常用指令參考:

Supervisor是一個C/S系統,它可以在類UNIX系統上控制系統程序,由python編寫,它提供了大量的功能來實作對程序的管理。

程式的多程序啟動,可以配置同時啟動的程序數,而不需要一個個啟動

程式的退出碼,可以根據程式的退出碼來判斷是否需要自動重新開機

程式所産生日志的處理

程序初始化的環境,包括目錄,使用者,umask,關閉程序所需要的信号等等

手動管理程序(開始,啟動,重新開機,檢視程序狀态)的web界面,和xmlrpc接口

支援的平台

可以運作在大多數類UNIX系統上,比如Linux、MAC OS X、Solaris、FreeBSD。

不支援任何版本的Windows。

支援Python2.4以及之後的版本,但不支援Python3。

安裝

pip
pip install supervisor
easy_install
easy_install supervisor
apt-get (Debian/Ubuntu)
apt-get update
apt-get install supervisor
           

預設配置檔案在/etc/supervisor/supervisord.conf

yum (Centos)

yum install supervisor

建立配置檔案

安裝完成後,使用下面這兩種方式建立預設的配置檔案:

使用root身份建立一個全局配置檔案echo_supervisord_conf > /etc/supervisord.conf,supervisord程式在運作後會自動查找并加載此目錄配置檔案。

在目前目錄建立配置檔案echo_supervisord_conf > supervisord.conf,

然後使用-c參數在啟動時手動指定配置檔案:supervisord -c supervisord.conf。

配置檔案通常被命名為supervisord.conf,它被supervisord和supervisorctl兩者使用。如果程式啟動時沒有包含-c參數(用于告訴程式加載指定的配置檔案名),程式将會按照下列順序查找supervisord.conf檔案,然後使用首個查找到的檔案作為結果。

$CWD/supervisord.conf

$CWD/etc/supervisord.conf

/etc/supervisord.conf

預設配置檔案echo_supervisord_conf内容:

; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
;
; Note: shell expansion ("~" or "$HOME") is not supported.  Environment
; variables can be expanded using this syntax: "%(ENV_HOME)s".

[unix_http_server]          ; supervisord的unix socket服務配置
file=/tmp/supervisor.sock   ; socket檔案的儲存目錄
;chmod=                 ; socket的檔案權限 (default )
;chown=nobody:nogroup       ; socket的擁有者群組名
;username=user              ; 預設不需要登陸使用者 (open server)
;password=               ; 預設不需要登陸密碼 (open server)

;[inet_http_server]         ; supervisord的tcp服務配置
;port=:        ; tcp端口
;username=user              ; tcp登陸使用者
;password=               ; tcp登陸密碼

[supervisord]                ; supervisord的主程序配置
logfile=/tmp/supervisord.log ; 主要的程序日志配置
logfile_maxbytes=MB        ; 最大日志體積,預設MB
logfile_backups=           ; 日志檔案備份數目,預設
loglevel=info                ; 日志級别,預設info; 還有:debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord的pidfile檔案
nodaemon=false               ; 是否以守護程序的方式啟動
minfds=                  ; 最小的有效檔案描述符,預設
minprocs=                 ; 最小的有效程序描述符,預設
;umask=                   ; 程序檔案的umask,預設
;user=chrism                 ; 預設為目前使用者,如果為root則必填
;identifier=supervisor       ; supervisord的表示符, 預設時'supervisor'
;directory=/tmp              ; 預設不cd到目前目錄
;nocleanup=true              ; 不在啟動的時候清除臨時檔案,預設false
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
;environment=KEY=value       ; 初始鍵值對傳遞給程序
;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)

; 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 ; use a unix:// URL  for a unix socket
;serverurl=http://: ; use an http:// url to specify an inet socket
;username=chris              ; 如果設定應該與http_username相同
;password=                ; 如果設定應該與http_password相同
;prompt=mysupervisor         ; 指令行提示符,預設"supervisor"
;history_file=~/.sc_history  ; 指令行曆史紀錄

; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.

;[program:theprogramname]
;command=/bin/cat              ; 運作的程式 (相對使用PATH路徑, 可以使用參數)
;process_name=%(program_name)s ; 程序名表達式,預設為%(program_name)s
;numprocs=                    ; 預設啟動的程序數目,預設為
;directory=/tmp                ; 在運作前cwd到指定的目錄,預設不執行cmd
;umask=                     ; 程序umask,預設None
;priority=                  ; 程式運作的優先級,預設
;autostart=true                ; 預設随supervisord自動啟動,預設true
;autorestart=unexpected        ; whether/when to restart (default: unexpected)
;startsecs=                   ; number of secs prog must stay running (def. )
;startretries=                ; max # of serial start failures (default )
;exitcodes=,                 ; 期望的退出碼,預設,
;stopsignal=QUIT               ; 殺死程序的信号,預設TERM
;stopwaitsecs=               ; max num secs to wait b4 SIGKILL (default )
;stopasgroup=false             ; 向unix程序組發送停止信号,預設false
;killasgroup=false             ; 向unix程序組發送SIGKILL信号,預設false
;user=chrism                   ; 為運作程式的unix帳号設定setuid
;redirect_stderr=true          ; 将标準錯誤重定向到标準輸出,預設false
;stdout_logfile=/a/path        ; 标準輸出的檔案路徑NONE=none;預設AUTO
;stdout_logfile_maxbytes=MB   ; max # logfile bytes b4 rotation (default MB)
;stdout_logfile_backups=     ; # of stdout logfile backups (default )
;stdout_capture_maxbytes=MB   ; number of bytes in 'capturemode' (default )
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=MB   ; max # logfile bytes b4 rotation (default MB)
;stderr_logfile_backups=     ; # of stderr logfile backups (default )
;stderr_capture_maxbytes=MB   ; number of bytes in 'capturemode' (default )
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A=,B=           ; process environment additions (def no adds)
;serverurl=AUTO                ; override serverurl computation (childutils)

; The below sample eventlistener section shows all possible
; eventlistener subsection values, create one or more 'real'
; eventlistener: sections to be able to handle event notifications
; sent by supervisor.

;[eventlistener:theeventlistenername]
;command=/bin/eventlistener    ; 運作的程式 (相對使用PATH路徑, 可以使用參數)
;process_name=%(program_name)s ; 程序名表達式,預設為%(program_name)s
;numprocs=                    ; 預設啟動的程序數目,預設為
;events=EVENT                  ; event notif. types to subscribe to (req'd)
;buffer_size=                ; 事件緩沖區隊列大小,預設
;directory=/tmp                ; 在運作前cwd到指定的目錄,預設不執行cmd
;umask=                     ; 程序umask,預設None
;priority=-                   ; 程式運作的優先級,預設-
;autostart=true                ; 預設随supervisord自動啟動,預設true
;autorestart=unexpected        ; whether/when to restart (default: unexpected)
;startsecs=                   ; number of secs prog must stay running (def. )
;startretries=                ; max # of serial start failures (default )
;exitcodes=,                 ; 期望的退出碼,預設,
;stopsignal=QUIT               ; 殺死程序的信号,預設TERM
;stopwaitsecs=               ; max num secs to wait b4 SIGKILL (default )
;stopasgroup=false             ; 向unix程序組發送停止信号,預設false
;killasgroup=false             ; 向unix程序組發送SIGKILL信号,預設false
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=MB   ; max # logfile bytes b4 rotation (default MB)
;stdout_logfile_backups=     ; # of stdout logfile backups (default )
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=MB   ; max # logfile bytes b4 rotation (default MB)
;stderr_logfile_backups        ; # of stderr logfile backups (default )
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;environment=A=,B=           ; process environment additions
;serverurl=AUTO                ; override serverurl computation (childutils)

; The below sample group section shows all possible group values,
; create one or more 'real' group: sections to create "heterogeneous"
; process groups.

;[group:thegroupname]
;programs=progname1,progname2  ; 任何在[program:x]中定義的x
;priority=                  ; 程式運作的優先級,預設

; 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 = relative/directory/*.ini
           

添加一個程式

以shadowsocks為例,編輯配置檔案supervisord.conf,在後面添加新程式

[program:shadowsocks]
command=ssserver -c /etc/shadowsocks.json
autostart=true
autorestart=true
user=nobody
           

啟動

使用指定配置檔案啟動:supervisord -c supervisord.conf

使用預設配置檔案啟動:supervisord

常用指令

控制指令基本都通過supervisorctl執行,輸入help可以看到指令清單。這是一些常用指令:

獲得所有程式狀态 supervisorctl status

關閉目标程式 supervisorctl stop spider

啟動目标程式 supervisorctl start spider

關閉所有程式 supervisorctl shutdown

參考:

Supervisor小試

使用supervisord來管理process

supervisord官方文檔