原文地址:https://word.gw1770df.cc/2016-08-04/linux/supervisor-%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/html
官網爲 http://supervisord.org/node
Supervisor是使用python開發的一個進程管工具,安裝和使用都很是簡單。使用 pip
或者 easy_install
安裝會很是方便,自動解決依賴關係。
– sudo pip install supervisor
– sudo easy_install supervisor
python
pip的安裝請參考 Python pip 安裝使用教程linux
安裝完成後系統會增長几個命令supervisord
用於啓動supervisor服務。supervisorctl
用於管理supervisor服務,管理使用supervisor啓動的進程。nginx
安裝好supervisor後須要手動的生成配置文件。echo_supervisord_conf | sudo tee /etc/supervisord.conf
supervisor默認讀取的配置文件爲/etc/supervisord.conf
,建議將配置文件放在此位置。web
咱們先簡單的查看一下 supervisord.conf
,配置文件格式和ini格式配置文件相同,由節、鍵、值組成,配置文件註釋爲;
。安全
[unix_http_server]
supervisorctl
命令進行管理進程時,使用的就是此sock文件。默認保持開啓,如將此項關閉 [inet_http_server]
則沒法使用。[inet_http_server]
supervisor
的web管理界面,配置監聽的地址和端口,已經用戶認證。默認爲關閉狀態。如需開啓則將此節註釋去掉,而後修改相應的鍵值。[supervisord]
[supervisorctl]
[unix_http_server]
相同。[include]
[include] files = /etc/supervisor.d/*.conf
讀取/etc/supervisor.d/文件夾下全部後綴爲conf的文件。架構
咱們使用 python2.7 來做爲演示,使用SimpleHTTPServer模塊方便快速的啓動一個http server。
1,建立配置文件 /etc/supervisor.d/test1.conf,寫入一下內容python2.7
[program:simplehttpserver] command=/usr/bin/env python2.7 -m SimpleHTTPServer 20080
這是一個最簡單的例子,第一行指定當前配置的程序名稱。第二行程序運行命令(20080 爲 http server端口號)。
2,第一個程序已經配置好,接下來就能夠啓動supervisord來查看一下效果。
輸入命令 sudo supervisord
便可啓動服務。
不少機器會打印出幾行信息,這並不表明程序出錯,意思是ide
「supervisord 是使用root身份來啓動的,讀取默認位置的配置文件,若是須要讀取其餘位置配置文件請使用 -c 參數」
3,如今使用ps -ef | grep python
來檢查一下剛纔配置的程序是否已經啓動。到此爲止咱們的第一步已經完成。
[program:theprogramname] command=/bin/cat ; 程序運行命令,建議使用絕對路徑。 process_name=%(program_name)s ; 程序名稱,可用的變量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目錄)。 通常程序須要運行多個副本的狀況會使用。後面會有例子。 numprocs=1 ; 程序運行的副本個數,默認爲1,若是值大於1,則`process_name` 必須包含 `%(process_num)s` numprocs_start=0 ; `%(process_num)s`起始數字,默認爲0 00=/tmp ; 程序運行的所在目錄,至關於先cd到指定目錄,而後運行程序。 umask=022 ; umask for process (default None) priority=999 ; 程序操做的的優先級,例如在start all/stop all,高優先級的程序會先關閉和重啓。 autostart=true ; 在supervisord啓動時自動啓動,默認爲true startsecs=1 ; 程序啓動前等待時間等待時間。默認爲1。 startretries=3 ; 嘗試重啓最大次數。默認爲3。 autorestart=unexpected ; 是否自動重啓,可選參數爲 false, unexpected, true。若是爲false則不自動重啓,若是爲unexpected表示若是程序退出信號不在 `exitcodes` 中,則自動重啓。默認爲unexpected exitcodes=0,2 ; 程序退出碼。配合`autorestart`使用。默認爲 0,2 stopsignal=QUIT ; 殺死進程是發送的信號,默認爲TREM。 stopwaitsecs=10 ; 發送SIGKILL信號前最大等待時間。默認爲10。 user ; 以指定用戶身份啓動程序。默認爲當前用戶。 stopasgroup=false ; 是否向子進程發送中止信號,這對於Flask的debug模式頗有用處,若是設置爲true,則不向子進程發送中止信號。默認爲false killasgroup=false ; 是否向子進程發送kill信號,默認爲false redirect_stderr=false ; 將錯誤輸出定向到標準輸出,默認爲false stdout_logfile=/a/path ; 標準輸出日誌路徑,可選參數爲 `自定義` `AUTO` `NONE`,`自定義`將日誌寫到自定義路徑,可用的變量有`group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目錄);`NONE`不建立日誌;`AUTO` 又supervisord自動選擇路徑,而且當supervisord服務從新啓動時原來自動建立的日誌以及日誌的備份文件會被刪除。默認爲AUTO stdout_logfile_maxbytes=1MB ; 標準輸出日誌單個文件最大大小,若是超過指定大小會將日誌文件備份,可用的單位 KB MB GB。若是設置爲0則表示不限制文件大小。默認爲50MB stdout_logfile_backups=10 ; 標準輸出日誌文件最大備份數。默認爲10 stdout_capture_maxbytes=1MB ; 當進程處於「stdout capture mode」模式下寫入到FIFO隊列最大字節數,可用單位 KB MB GB。默認爲0,詳細說明見[capture-mode](http://supervisord.org/logging.html#capture-mode) stdout_events_enabled=false ; ;如下配置項配置錯誤輸出的日誌參數。和上面標準輸出配置相同。 stderr_logfile=/a/path ; stderr_logfile_maxbytes=1MB ; stderr_logfile_backups=10 ; stderr_capture_maxbytes=1MB ; stderr_events_enabled=false ; environment=A="1",B="2" ; 環境變量設置,可用的變量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`。 默認爲空。 serverurl=AUTO ; override serverurl computation (childutils)
command
,其餘未可選參數。[program:x]
自定義的程序名不能重複須要啓動4個進程,分別監聽四個連續端口(20081 – 20084)。
將錯誤輸出定向到標準輸出,每一個端口標準輸出寫入到不一樣文件中,單個文件最大50MB,最多保存3個備份。
啓動前等待3秒。
supervisord啓動時自動啓動。程序運行出錯自動重啓,最大嘗試重啓次數3次。
[program:tornado-test] command=/usr/bin/env python2.7 /home/user/tornado-test.py --port=%(process_num)s process_name=%(program_name)s_port=%(process_num)s numprocs=4 numprocs_start=20081 redirect_stderr=true stdout_logfile=/tmp/tornado-test-%(process_num)s.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=3 autorestart=true startsecs=3 startretries=3
nginx默認運行狀態是後臺運行程序。supervisord不能管理此類程序須要,須要修改nginx主配置文件。
在nginx最外層加入daemon off;
最簡單的配置。
[program:nginx]
command=/usr/sbin/nginx ;建議使用絕對路徑。
supervisor進程管理工具,能夠方便啓動中止進程,查看程序日誌,從新載入配置文件。
若是supervisord配置文件再也不默認位置,使用supervisorctl工具時須要指定配置文件路徑 supervisordctl -c 配置文件路徑
經常使用命令
supervisordctl status
查看進程運行狀態supervisordctl start 進程名
啓動進程supervisordctl stop 進程名
關閉進程supervisordctl restart 進程名
重啓進程supervisordctl update
從新載入配置文件supervisordctl shutdown
關閉supervisordsupervisordctl clear 進程名
清空進程日誌supervisordctl
進入到交互模式下。使用help
查看全部命令。start
stop
restart
+ all 表示啓動,關閉,重啓全部進程。
若是一個進程啓動了多個副本,例如上文tornado-test
。
關閉全部副本