天天看點

SupervisorSupervisor

Supervisor

supervisor簡介

supervisor是一個管理程序的工具,python語言開發的通用的管理程式,可以管理和監控Linux上的程序,能将程序變成背景的daemon,并監控程序狀态,出現異常退出時能自動重新開機。

保持程式在背景的伺服器上保持運作狀态,是實際生産環境中常需要的需求,避免背景程序崩潰,頻繁手動重新開機程式十分費事,疏忽大意也會使程式得不到監控,supervisor是一個很好的選擇。

supervisor元件

  • supervisord

    supervisor的伺服器端部分,啟動supervisor就是運作這個指令

  • supervisorctl

    啟動supervisor的指令行視窗

  • Web Server

    提供web接口進行通路控制

  • XML-RPC interface

supervisor安裝

Linux下安裝指令

pip install supervisor

生成supervisor配置檔案

echo_supervisord_conf > supervisor.conf

系統會生成

/etc/supervisord.conf

預設檔案,在這個配置檔案裡有有英文注釋,很人性化。每個元件部分都有自己的參數設定。在

supervisor /etc/supervisord.conf

配置檔案中 使用 include在配置檔案的最後,有一個 [include] 的配置項,跟 Nginx 一樣,可以 include 某個檔案夾下的所有配置檔案,

這樣我們就可以為每個程序或相關的幾個程序的配置單獨寫成一個檔案。

對于要監控的程式配置檔案,樣闆如下

270 ;[program:theprogramname]
271 ;command=/bin/cat              ; the program (relative uses PATH, can take args)
272 ;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
273 ;numprocs=1                    ; number of processes copies to start (def 1)
274 ;directory=/tmp                ; directory to cwd to before exec (def no cwd)
275 ;umask=022                     ; umask for process (default None)
276 ;priority=999                  ; the relative start priority (default 999)
277 ;autostart=true                ; start at supervisord start (default: true)
278 ;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
279 ;startretries=3                ; max # of serial start failures when starting (default 3)
280 ;autorestart=unexpected        ; when to restart if exited after running (def: unexpected)
281 ;exitcodes=0,2                 ; 'expected' exit codes used with autorestart (default 0,2)
282 ;stopsignal=QUIT               ; signal used to kill process (default TERM)
283 ;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
284 ;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
285 ;killasgroup=false             ; SIGKILL the UNIX process group (def false)
286 ;user=chrism                   ; setuid to this UNIX account to run the program
287 ;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
288 ;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
289 ;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
290 ;stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
291 ;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
292 ;stdout_events_enabled=false   ; emit events on stdout writes (default false)
293 ;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
294 ;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
295 ;stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
296 ;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
297 ;stderr_events_enabled=false   ; emit events on stderr writes (default false)
298 ;environment=A="1",B="2"       ; process environment additions (def no adds)
299 ;serverurl=AUTO                ; override serverurl computation (childutils)
300 
301 ; The sample eventlistener section below shows all possible eventlistener
302 ; subsection values.  Create one or more 'real' eventlistener: sections to be
303 ; able to handle event notifications sent by supervisord.

           

(其中分号’;'表示注釋)

這個就是supervisord.conf 檔案的内容,是不是有些太多了。

我在實際應用也隻用了其中一部分

[program:myapp]      ;myapp 是supervisor監管的程式名稱
;directory=/home/        ;運作程式所在的目錄
command=python3 /home/myapp.py   ;啟動所要監控的程式的指令
;autostart=true   ;程式随着supervisor啟動而自動啟動
autorestart=truestartsecs = 5   ;異常後程式自動重新開機的次數
autorestart =  true    ;程式崩潰後是否自動重新開機
startretries = 50       ;允許重新開機失敗多少次
user = root   
redirect_stderr = true
stdout_logfile_maxbytes = 30MB
stdout_logfile_backups = 5
stdout_logfile = /data/logs/supervisor/myapp_stdout.log  ; 輸出日志的檔案路徑
stderr_logfile = /data/logs/supervisor/myapp_err.log
           

其它部分的設定可以預設。

常用指令

supervisord -c supervisord.conf                             配置完supervisord.conf通過配置檔案啟動supervisor
supervisorctl -c supervisord.conf status                    察看supervisor的狀态
supervisorctl -c supervisord.conf reload                    重新載入 修改後的配置檔案
supervisorctl -c supervisord.conf start [all]|[appname]     啟動指定/所有 supervisor管理的程式程序
supervisorctl -c supervisord.conf stop [all]|[appname]      關閉指定/所有 supervisor管理的程式程序
           

通過

supervisorctl

指令進入到指令行端口,可以就可以檢視監管的程序狀态了。使用

status

start

stop

等指令操作。

修改supervisor中的配置檔案的,避免在/temp/supervisor.log 下存放檔案,避免被linux系統删除,應該修改存放的路徑。

參考連結:https://blog.csdn.net/woshixiaosimao/article/details/54315258

繼續閱讀