SUPERVISOR進程管理器配置指南python
1.1. 官網算法
1.2. 介紹服務器
Supervisor是一個進程控制系統. 它是一個C/S系統(注意: 其提供WEB接口給用戶查詢和控制), 它容許用戶去監控和控制在類UNIX系統的進程. 它的目標與launchd, daemontools和runit有些類似, 可是與它們不同的是, 它不是做爲init(進程號pid是1)運行. 它是被用來控制進程, 而且它在啓動的時候和通常程序並沒有二致.url
那麼通俗點,它的做用是什麼?你的Nginx,Tomcat,memcache,Redis...會崩麼,不會?好吧,那你本身寫的服務器監測腳本呢?好吧,不要再糾結了,交給Supervisor吧,它會幫你維護這些,即便它們不當心崩了,Supervisor會幫你看住它們,維護它們。pwa
2.1. 安裝rest
$apt-get install python-setuptools $easy_install supervisor $echo_supervisord_conf > /etc/supervisord.conf 2.2. 配置日誌
$nano /etc/supervisord.conf 2.3. (program)配置模板code
[program:cat] command=/bin/cat process_name=%(program_name)s numprocs=1 directory=/tmp umask=022 priority=999 autostart=true autorestart=true startsecs=10 startretries=3 exitcodes=0,2 stopsignal=TERM stopwaitsecs=10 user=chrism redirect_stderr=false stdout_logfile=/a/path stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/a/path stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment=A="1",B="2" serverurl=AUTO 簡化模板server
[program:test] command=python test.py directory=/home/supervisor_test/ autorestart=true stopsignal=INT user=root stdout_logfile=test_out.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=test_err.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB 2.4. (program)配置說明
;爲必須填寫項 ;[program:應用名稱] [program:cat]
;*命令路徑,若是使用python啓動的程序應該爲 python /home/test.py, ;不建議放入/home/user/, 對於非user用戶通常狀況下是不能訪問 command=/bin/cat
;當numprocs爲1時,process_name=%(program_name)s ;當numprocs>=2時,%(program_name)s_%(process_num)02d process_name=%(program_name)s
;進程數量 numprocs=1
;執行目錄,如有/home/supervisor_test/test1.py ;將directory設置成/home/supervisor_test ;則command只需設置成python test1.py ;不然command必須設置成絕對執行目錄 directory=/tmp
;掩碼:--- -w- -w-, 轉換後rwx r-x w-x umask=022
;優先級,值越高,最後啓動,最早被關閉,默認值999 priority=999
;若是是true,當supervisor啓動時,程序將會自動啓動 autostart=true
;*自動重啓 autorestart=true
;啓動延時執行,默認1秒 startsecs=10
;啓動嘗試次數,默認3次 startretries=3
;當退出碼是0,2時,執行重啓,默認值0,2 exitcodes=0,2
;中止信號,默認TERM ;中斷:INT(相似於Ctrl+C)(kill -INT pid),退出後會將寫文件或日誌(推薦) ;終止:TERM(kill -TERM pid) ;掛起:HUP(kill -HUP pid),注意與Ctrl+Z/kill -stop pid不一樣 ;從容中止:QUIT(kill -QUIT pid) ;KILL, USR1, USR2其餘見命令(kill -l),說明1 stopsignal=TERM
stopwaitsecs=10
;*以root用戶執行 user=root
;重定向 redirect_stderr=false
stdout_logfile=/a/path stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/a/path stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB
;環境變量設置 environment=A="1",B="2"
serverurl=AUTO 2.5. (inet_http_server)配置說明
可使用瀏覽器查看和控制進程狀態
[inet_http_server] ; inet (TCP) server disabled by default port=0.0.0.0:9001 ; (ip_address:port specifier, *:port for all iface) username=user ; 用戶名 (default is no username (open server)) password=123 ; 密碼 (default is no password (open server)) 3. 啓動與關閉
3.1. 啓動supervisord
$supervisord -c /etc/supervisord.conf 3.2. 關閉supervisord
$supervisorctl shutdown 3.3. 從新載入配置
$supervisorctl reload 說明1:
經常使用信號說明-原文
信號名稱 數字表示 說明 SIGHUP 1 終端掛起或控制進程終止。當用戶退出Shell時,由該進程啓動的全部進程都會收到這個信號,默認動做爲終止進程。 SIGINT 2 鍵盤中斷。當用戶按下組合鍵時,用戶終端向正在運行中的由該終端啓動的程序發出此信號。默認動做爲終止進程。 SIGQUIT 3 鍵盤退出鍵被按下。當用戶按下或組合鍵時,用戶終端向正在運行中的由該終端啓動的程序發出此信號。默認動做爲退出程序。 SIGFPE 8 發生致命的運算錯誤時發出。不只包括浮點運算錯誤,還包括溢出及除數爲0等全部的算法錯誤。默認動做爲終止進程併產生core文件。 SIGKILL 9 無條件終止進程。進程接收到該信號會當即終止,不進行清理和暫存工做。該信號不能被忽略、處理和阻塞,它向系統管理員提供了能夠殺死任何進程的方法。 SIGALRM 14 定時器超時,默認動做爲終止進程。 SIGTERM 15 程序結束信號,能夠由 kill 命令產生。與SIGKILL不一樣的是,SIGTERM 信號能夠被阻塞和終止,以便程序在退出前能夠保存工做或清理臨時文件等。 $ kill -l