1. 程式人生 > >Python Supervisord 程序管理工具

Python Supervisord 程序管理工具

Supervisord,用Python實現的一款非常實用的程序管理工具,在批量服務化管理時特別有效。


環境
centos
python2.6.6


安裝 
wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0a10.tar.gz
tar zxvf supervisor-3.0a10.tar.gz
cd supervisor-3.0a10
python setup.py install
如果上述遇到問題,請按如下操作。


產生基礎配置檔案
echo_supervisord_conf > /etc/supervisord.conf


配置
[inet_http_server]前面的分號去掉; 如下:




啟動
/usr/local/bin/supervisord -c /etc/supervisord.conf

關閉

username=user
passwd=123
/usr/local/bin/supervisorctl -u{$username} -p{$passwd} stop all
/usr/local/bin/supervisorctl -u{$username} -p{$passwd} shutdown

如下圖:




深入配置

[program:service]
command=sh /opt/soft/service/run.sh  ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)


numprocs=1                    ; number of processes copies to start (def 1)
directory=/opt/soft/service/                ; directory to cwd to before exec (def no cwd)
autostart=true                ; start at supervisord start (default: true)
autorestart=true              ; retstart at unexpected quit (default: true)

stopsignal=QUIT               ; signal used to kill process (default TERM)
stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
以上配置了一個shell指令碼的啟動和stop過程。
一般java程式都喜歡在一個shell指令碼內初始化classpath,再執行java main。
直接在shell中run java會出現stop失敗的情況,在啟動前新增 exec即可。

#!/bin/sh
export CLASSPATH=.
for jarpath in `ls library/*.jar`
do
    CLASSPATH=$CLASSPATH:$jarpath
done
export CLASSPATH=$CLASSPATH
exec java com.chen.main;


幫助

supervisord,初始啟動Supervisord,啟動、管理配置中設定的程序。
supervisorctl stop programxxx,停止某一個程序(programxxx),programxxx為[program:chatdemon]裡配置的值,這個示例就是chatdemon。
supervisorctl start programxxx,啟動某個程序
supervisorctl restart programxxx,重啟某個程序
supervisorctl stop all,停止全部程序,注:start、restart、stop都不會載入最新的配置檔案。
supervisorctl reload,載入最新的配置檔案,並按新的配置啟動、管理所有程序。

http://smarden.org/runit/runscripts.html 一些可參考的啟動配置

注意 
不帶引數執行supervisord是以daemon方式執行。
把supervisord加入到開機啟動項裡就可以完成監控程序的功能了。
當supervisord以非daemon方式執行時,殺掉supervisord後,被監控的程序也退出了。
而以daemon方式執行,殺掉supervisord對被監控程序無影響。

參考推薦: