supervisord进程管理
Supervisord
Supervisord是一款基于Python的進程管理工具,當主機上存在多個的進程需要管理時,通過supervisor可以簡化進程的管理。 再通過supervisor提供的rpc接口,可以實現多機多進程管理。
管理進程配置
配置示例:
多機多進程管理
Github上的supervisord-monitor項目為多機多進程管理提供了 很好的思路。
******************************************************************************************
1.安裝(以下方式任選一種)
-?easy_install?supervisor-?pip?install?supervisor-?yum?install?supervisor-?apt-get?install?supervisor-?下載源碼包使用:?python?setup.py?install?來安裝2.配置
生成基礎配置文件
echo_supervisord_conf?>?/usr/local/supervisor/supervisord.conf配置supervisor
更改include區段
[include]
files = /usr/local/supervisor/conf/*.conf # 啟動進程配置文件所在位置如果需要web控制界面
[inet_http_server]
port=0.0.0.0:9001
username=username ; 你的用戶名
password=password ; 你的密碼
啟動進程配置說明
?;?管理單個進程的配置,可創建多個,下面是所有可能的配置選項;[program:theprogramname];command=/bin/cat??????????????;?啟動進程的命令?使用相對路徑,可以加參數;process_name=%(program_name)s?;?進程名稱?表達式?(默認?%(program_name)s);numprocs=1????????????????????;?進程數目?(def?1);directory=/tmp????????????????;?執行命令所在的目錄?(def?no?cwd);umask=022?????????????????????;?進程默認權限?(default?None);priority=999??????????????????;?進程啟動相對優先權?(default?999);autostart=true????????????????;?跟隨supervisor啟動時啟動?(default:?true);autorestart=unexpected????????;?計劃啟動?(default:?unexpected);startsecs=1???????????????????;?延時啟動?(def.?1);startretries=3????????????????;?最多連續啟動失敗?(default?3);exitcodes=0,2?????????????????;?進程結束代碼?(default?0,2);stopsignal=QUIT???????????????;?signal?used?to?kill?process?(default?TERM);stopwaitsecs=10???????????????;?最長結束等待時間,否則使用?SIGKILL?(default?10);stopasgroup=false?????????????;?是否想UNIX進程組發送結束信號?(default?false);killasgroup=false?????????????;?SIGKILL?UNIX?進程組?(def?false);user=chrism???????????????????;?設置啟動此程序的用戶;redirect_stderr=true??????????;?重定向程序的標準錯誤到標準輸出?(default?false);stdout_logfile=/a/path????????;?標準輸出的日志路徑,?NONE?for?none;?default?AUTO;stdout_logfile_maxbytes=1MB???;?日志文件最大值,否則循環寫入?(default?50MB);stdout_logfile_backups=10?????;?標準輸出日志備份數目?(default?10);stdout_capture_maxbytes=1MB???;?number?of?bytes?in?'capturemode'?(default?0);stdout_events_enabled=false???;?emit?events?on?stdout?writes?(default?false);stderr_logfile=/a/path????????;?標準錯誤輸出日志路徑,?NONE?for?none;?default?AUTO;stderr_logfile_maxbytes=1MB???;?日志文件最大值,否則循環寫入?(default?50MB);stderr_logfile_backups=10?????;?標準錯誤日志備份數目?(default?10);stderr_capture_maxbytes=1MB???;?number?of?bytes?in?'capturemode'?(default?0);stderr_events_enabled=false???;?emit?events?on?stderr?writes?(default?false);environment=A="1",B="2"???????;?進程附加環境?(def?no?adds);serverurl=AUTO????????????????;?override?serverurl?computation?(childutils)
3.進程管理
Supervisord安裝完成后有兩個可用的命令行supervisord和supervisorctl,命令使用如下:
supervisord:?啟動Supervisord,?一般在etc/init.d/下面會有對應的服務命令,?用它啟動即可指定配置文件啟動:
supervisord?-c?/usr/local/supervisor/supervisor.conf
supervisorctl 管理終端:
直接運行supervisorctl打開supervisor控制終端, 輸入help可以查看支持的命令,基本命令如下:
default?commands?(type?help?<topic>):=====================================add????clear??fg????????open??quit????remove??restart???start???stop??update avail??exit???maintail??pid???reload??reread??shutdown??status??tail??version或者可以在bash直接執行supervisor控制命令, 基本命令如下:
supervisorctl?status:?查看當前運行的進程列表supervisorctl?stop?xxx:?停止某一個進程(xxx),xxx為[program:theprogramname]里配置的值。supervisorctl?start?xxx:?啟動某個進程supervisorctl?restart?xxx:?重啟某個進程supervisorctl?stop?groupworker:?重啟所有屬于名為groupworker這個分組的進程(start,restart同理)supervisorctl?stop?all,停止全部進程,注:start、restart、stop都不會載入最新的配置文件。supervisorctl?reload,載入最新的配置文件,停止原有進程并按新的配置啟動、管理所有進程。supervisorctl?update,根據最新的配置文件,啟動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啟。注意:顯示用stop停止掉的進程,用reload或者update都不會自動重啟。
4.其他說明
supervisord要求管理的程序是非daemon程序,supervisord會幫你把它轉成daemon程序,因此如果用supervisord來管理nginx的話,必須在nginx的配置文件里添加一行設置daemon off讓nginx以非daemon方式啟動。
同理, 使用supervisor管理redis的啟動時, 也必須設置: daemonize no
5.配置范例
????[program:test-demo]command=python?/data/python/test/test.pyautostart=trueautorestart=truestartsecs=10user=helloredirect_stderr=truestdout_logfile=/data/log/test.logstdout_logfile_maxbytes=10MBstdout_logfile_backups=10stopasgroup=truekillasgroup=trueenvironment=PYTHONPATH='/data/python/test'6.問題備注
一個可能的問題:
*?Starting?Supervisor?daemon?manager......Error:?Another?program?is?already?listening?on?a?port?that?one?of?our?HTTP?servers?is?configured?to?use.??Shut?this?program?down?first?before?starting?supervisord.For?help,?use?/usr/bin/supervisord?-h......fail!解決:
解決辦法:unlink supervisor.sock文件的位置
6.參考資料
http://supervisord.org/
http://jwch.sdut.edu.cn/book/server/supervisor.html
http://blog.jiunile.com/linux%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86supervisord.html
轉載于:https://blog.51cto.com/5404542/1760864
總結
以上是生活随笔為你收集整理的supervisord进程管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift字符串转换成类
- 下一篇: textarea内容有换行时存入数据库丢