红联Linux门户
Linux帮助

CentOS 6.3安装配置supervisor进程管理工具

发布时间:2014-08-07 09:52:37来源:linux网站作者:ydt619

1. Supervisor是一个C/S系统,它可以在类unix操作系统让用户来监视和控制后台服务进程的数量,一个很重要的功能就是监控服务器的主要后台进程,并在出现问题是自动重启。


2. 根据服务器上的python版本下载对应的setuptools

[root@test1 ~]# python -V

Python 2.6.6

wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086

直接安装

sh setuptools-0.6c11-py2.6.egg


3. 下载并安装supervisor

wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0b1.tar.gz
tar -zxvf supervisor-3.0b1.tar.gz
cd supervisor-3.0b1
python setup.py install
安装setuptools后也可以
easy_install supervisor


4. 设定supervisor配置文件

创建默认的配置文件
echo_supervisord_conf  >/etc/supervisord.conf
vi /etc/supervisord.conf
取消以下的注释,并修改IP为0.0.0.0
[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))
增加自定义的后台进程(注意进程名之间用一个:分隔)
[program:hello]
command=python /root/hello.py
priority=1
numprocs=1
autostart=true
autorestart=true
startretries=10
stopsignal=KILL
stopwaitsecs=10
redirect_stderr=true
stdout_logfile=/root/hello.log


5. 设定supervisor启动文件

vi /etc/init.d/supervisord

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

PROGNAME=supervisord

DAEMON=/usr/bin/$PROGNAME

CONFIG=/etc/$PROGNAME.conf

PIDFILE=/tmp/$PROGNAME.pid

DESC="supervisord daemon"

SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0

start()
{
echo -n "Starting $DESC: $PROGNAME"
$DAEMON -c $CONFIG
echo "..."
}
stop()
{
echo -n "Stopping $DESC: $PROGNAME"
supervisor_pid=$(cat $PIDFILE)
kill -15 $supervisor_pid
echo "..."
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0


6.  写一个简单的python脚本

安装web.py

easy_install web.py

vi /root/hello.py

import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
if __name__ == "__main__":
app.run()


7. 启动supervisor服务,并观察hello服务状态

/etc/init.d/supervisord start

查看日志

tail -f /tmp/supervisord.log

2012-11-09 15:33:53,367 WARN received SIGTERM indicating exit request

2012-11-09 15:33:53,367 INFO waiting for :hello to die

2012-11-09 15:33:53,371 INFO stopped: :hello (terminated by SIGKILL)

2012-11-09 15:33:53,514 CRIT Supervisor running as root (no user in config file)

2012-11-09 15:33:53,552 INFO RPC interface 'supervisor' initialized

2012-11-09 15:33:53,552 CRIT Server 'unix_http_server' running without any HTTP authentication checking

2012-11-09 15:33:53,560 INFO daemonizing the supervisord process

2012-11-09 15:33:53,562 INFO supervisord started with pid 13698

2012-11-09 15:33:54,568 INFO spawned: ':hello' with pid 13699

2012-11-09 15:33:55,572 INFO success: :hello entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

可以使用supervisorctl管理进程

upervisorctl status        查询状态

supervisorctl start hello    开启服务

supervisorctl stop hello    关闭服务


8. 之前配置文件开启了web访问,这样可以直接通过浏览器观察和控制进程,非常方便。