001-supervisor
原文地址:https://word.gw1770df.cc/2016-08-04/linux/supervisor-%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/
Supervisor
官網(wǎng)為?http://supervisord.org/
A Process Control System
使用b/s架構(gòu)、運(yùn)行在類Unix系統(tǒng)上一個(gè)進(jìn)程監(jiān)控管理系統(tǒng)
它可以使進(jìn)程以daemon方式運(yùn)行,并且一直監(jiān)控進(jìn)程,在意外退出時(shí)能自動(dòng)重啟進(jìn)程。
?
安裝
Supervisor是使用python開發(fā)的一個(gè)進(jìn)程管工具,安裝和使用都非常簡單。使用?pip?或者?easy_install?安裝會(huì)非常方便,自動(dòng)解決依賴關(guān)系。
–?sudo pip install supervisor
–?sudo easy_install supervisor
pip的安裝請(qǐng)參考?Python pip 安裝使用教程
初識(shí)
安裝完成后系統(tǒng)會(huì)增加幾個(gè)命令
supervisord?用于啟動(dòng)supervisor服務(wù)。
supervisorctl?用于管理supervisor服務(wù),管理使用supervisor啟動(dòng)的進(jìn)程。
安裝好supervisor后需要手動(dòng)的生成配置文件。
echo_supervisord_conf | sudo tee /etc/supervisord.conf
supervisor默認(rèn)讀取的配置文件為/etc/supervisord.conf,建議將配置文件放在此位置。
我們先簡單的查看一下?supervisord.conf,配置文件格式和ini格式配置文件相同,由節(jié)、鍵、值組成,配置文件注釋為;。
- [unix_http_server]
此節(jié)是配置連接supervisord的sock的文件,包括sock文件路徑,用戶認(rèn)證。使用supervisorctl命令進(jìn)行管理進(jìn)程時(shí),使用的就是此sock文件。默認(rèn)保持開啟,如將此項(xiàng)關(guān)閉?[inet_http_server]?則無法使用。 - [inet_http_server]
此節(jié)配置supervisor的web管理界面,配置監(jiān)聽的地址和端口,已經(jīng)用戶認(rèn)證。默認(rèn)為關(guān)閉狀態(tài)。如需開啟則將此節(jié)注釋去掉,然后修改相應(yīng)的鍵值。 - [supervisord]
此節(jié)為配置supervisor服務(wù)參數(shù),例如日志,日志大小等一些參數(shù)。 - [supervisorctl]
用于配置supervisorctl管理程序參數(shù),例如sock文件路徑,需要和[unix_http_server]相同。 - [include]
此節(jié)作用為包含其他配置文件,本文建議開啟此項(xiàng),包含額外的配置文件,將需要管理的進(jìn)程配置寫入到額外的配置文件,不需要經(jīng)常編輯主配置文件,保證安全性。修改代碼為
讀取/etc/supervisor.d/文件夾下所有后綴為conf的文件。
第一步
配置第一個(gè)使用supervisord管理的程序
我們使用 python2.7 來作為演示,使用SimpleHTTPServer模塊方便快速的啟動(dòng)一個(gè)http server。
1,創(chuàng)建配置文件 /etc/supervisor.d/test1.conf,寫入一下內(nèi)容
這是一個(gè)最簡單的例子,第一行指定當(dāng)前配置的程序名稱。第二行程序運(yùn)行命令(20080 為 http server端口號(hào))。
2,第一個(gè)程序已經(jīng)配置好,接下來就可以啟動(dòng)supervisord來查看一下效果。
輸入命令?sudo supervisord?即可啟動(dòng)服務(wù)。
很多機(jī)器會(huì)打印出幾行信息,這并不代表程序出錯(cuò),意思是
3,現(xiàn)在使用ps -ef | grep python來檢查一下剛才配置的程序是否已經(jīng)啟動(dòng)。到此為止我們的第一步已經(jīng)完成。
詳細(xì)配置
[program:theprogramname] command=/bin/cat ; 程序運(yùn)行命令,建議使用絕對(duì)路徑。 process_name=%(program_name)s ; 程序名稱,可用的變量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目錄)。 一般程序需要運(yùn)行多個(gè)副本的情況會(huì)使用。后面會(huì)有例子。 numprocs=1 ; 程序運(yùn)行的副本個(gè)數(shù),默認(rèn)為1,如果值大于1,則`process_name` 必須包含 `%(process_num)s` numprocs_start=0 ; `%(process_num)s`起始數(shù)字,默認(rèn)為0 00=/tmp ; 程序運(yùn)行的所在目錄,相當(dāng)于先cd到指定目錄,然后運(yùn)行程序。 umask=022 ; umask for process (default None) priority=999 ; 程序操作的的優(yōu)先級(jí),例如在start all/stop all,高優(yōu)先級(jí)的程序會(huì)先關(guān)閉和重啟。 autostart=true ; 在supervisord啟動(dòng)時(shí)自動(dòng)啟動(dòng),默認(rèn)為true startsecs=1 ; 程序啟動(dòng)前等待時(shí)間等待時(shí)間。默認(rèn)為1。 startretries=3 ; 嘗試重啟最大次數(shù)。默認(rèn)為3。 autorestart=unexpected ; 是否自動(dòng)重啟,可選參數(shù)為 false, unexpected, true。如果為false則不自動(dòng)重啟,如果為unexpected表示如果程序退出信號(hào)不在 `exitcodes` 中,則自動(dòng)重啟。默認(rèn)為unexpected exitcodes=0,2 ; 程序退出碼。配合`autorestart`使用。默認(rèn)為 0,2 stopsignal=QUIT ; 殺死進(jìn)程是發(fā)送的信號(hào),默認(rèn)為TREM。 stopwaitsecs=10 ; 發(fā)送SIGKILL信號(hào)前最大等待時(shí)間。默認(rèn)為10。 user ; 以指定用戶身份啟動(dòng)程序。默認(rèn)為當(dāng)前用戶。 stopasgroup=false ; 是否向子進(jìn)程發(fā)送停止信號(hào),這對(duì)于Flask的debug模式很有用處,如果設(shè)置為true,則不向子進(jìn)程發(fā)送停止信號(hào)。默認(rèn)為false killasgroup=false ; 是否向子進(jìn)程發(fā)送kill信號(hào),默認(rèn)為false redirect_stderr=false ; 將錯(cuò)誤輸出定向到標(biāo)準(zhǔn)輸出,默認(rèn)為false stdout_logfile=/a/path ; 標(biāo)準(zhǔn)輸出日志路徑,可選參數(shù)為 `自定義` `AUTO` `NONE`,`自定義`將日志寫到自定義路徑,可用的變量有`group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目錄);`NONE`不創(chuàng)建日志;`AUTO` 又supervisord自動(dòng)選擇路徑,并且當(dāng)supervisord服務(wù)重新啟動(dòng)時(shí)原來自動(dòng)創(chuàng)建的日志以及日志的備份文件會(huì)被刪除。默認(rèn)為AUTO stdout_logfile_maxbytes=1MB ; 標(biāo)準(zhǔn)輸出日志單個(gè)文件最大大小,如果超過指定大小會(huì)將日志文件備份,可用的單位 KB MB GB。如果設(shè)置為0則表示不限制文件大小。默認(rèn)為50MB stdout_logfile_backups=10 ; 標(biāo)準(zhǔn)輸出日志文件最大備份數(shù)。默認(rèn)為10 stdout_capture_maxbytes=1MB ; 當(dāng)進(jìn)程處于“stdout capture mode”模式下寫入到FIFO隊(duì)列最大字節(jié)數(shù),可用單位 KB MB GB。默認(rèn)為0,詳細(xì)說明見[capture-mode](http://supervisord.org/logging.html#capture-mode) stdout_events_enabled=false ; ;以下配置項(xiàng)配置錯(cuò)誤輸出的日志參數(shù)。和上面標(biāo)準(zhǔn)輸出配置相同。 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" ; 環(huán)境變量設(shè)置,可用的變量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`。 默認(rèn)為空。 serverurl=AUTO ; override serverurl computation (childutils)- 必要參數(shù)只有?command,其他未可選參數(shù)。
- [program:x]?自定義的程序名不能重復(fù)
配置示例
管理tornado應(yīng)用
需要啟動(dòng)4個(gè)進(jìn)程,分別監(jiān)聽四個(gè)連續(xù)端口(20081 – 20084)。
將錯(cuò)誤輸出定向到標(biāo)準(zhǔn)輸出,每個(gè)端口標(biāo)準(zhǔn)輸出寫入到不同文件中,單個(gè)文件最大50MB,最多保存3個(gè)備份。
啟動(dòng)前等待3秒。
supervisord啟動(dòng)時(shí)自動(dòng)啟動(dòng)。程序運(yùn)行出錯(cuò)自動(dòng)重啟,最大嘗試重啟次數(shù)3次。
管理nginx
nginx默認(rèn)運(yùn)行狀態(tài)是后臺(tái)運(yùn)行程序。supervisord不能管理此類程序需要,需要修改nginx主配置文件。
在nginx最外層加入daemon off;
最簡單的配置。
[program:nginx] command=/usr/sbin/nginx ;建議使用絕對(duì)路徑。supervisorctl
supervisor進(jìn)程管理工具,可以方便啟動(dòng)停止進(jìn)程,查看程序日志,重新載入配置文件。
如果supervisord配置文件不再默認(rèn)位置,使用supervisorctl工具時(shí)需要指定配置文件路徑?supervisordctl -c 配置文件路徑
常用命令
- supervisordctl status?查看進(jìn)程運(yùn)行狀態(tài)
- supervisordctl start 進(jìn)程名?啟動(dòng)進(jìn)程
- supervisordctl stop 進(jìn)程名?關(guān)閉進(jìn)程
- supervisordctl restart 進(jìn)程名?重啟進(jìn)程
- supervisordctl update?重新載入配置文件
- supervisordctl shutdown?關(guān)閉supervisord
- supervisordctl clear 進(jìn)程名?清空進(jìn)程日志
- supervisordctl?進(jìn)入到交互模式下。使用help查看所有命令。
start?stop?restart?+ all 表示啟動(dòng),關(guān)閉,重啟所有進(jìn)程。
如果一個(gè)進(jìn)程啟動(dòng)了多個(gè)副本,例如上文tornado-test。
關(guān)閉所有副本
轉(zhuǎn)載于:https://www.cnblogs.com/xuefy/p/10990280.html
總結(jié)
以上是生活随笔為你收集整理的001-supervisor的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 题解【大融合】
- 下一篇: HDU3338 Kakuro Exten