官方手册:http://www.supervisord.org/
安装 supervisor可以采用快捷的安装方式如下:
yum install python-setuptools -y
easy-install supervisor 或者pip install supervisor
下面是编译安装的步骤:
以CentOS6.7为例,原始安装包存放在/home/tools/supervisor/src下。
下面是一个自动安装的脚本:
文件目录结构如下:
├── install.sh
└── src
└── supervisor-3.3.1.tar.gz
install.sh内容如下:
#!/bin/bash
#auto install supervisor-3.3.1
yum install python-setuptools -y
tar xf src/supervisor-3.3.1.tar.gz -C src/
cd src/supervisor-3.3.1
python setup.py install
echo_supervisord_conf > /etc/supervisord.conf
if[ $? = 0 ];then
echo -e "---------- $(date +"%F%T") installed supervisor Success. --------------\n" | tee -a../../install.log
else
echo -e "---------- $(date +"%F%T") installed supervisor Failed. --------------\n" | tee -a ../../install.log
fi
简单的配置supervisor:
vim /etc/supervisord.conf 在最后添加上如下的内容:
[program:redis]
;注意:使用supervisor 来监控redis自启动的话,必须设置为前台redis运行,不然会报错。
command=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
autorstart=true
autorestart=true
stdout_logfile=/tmp/supervisor.log
[inet_http_server]
;warning:itis better add one iptables rule to deny others access 9001 port
port=*:9001
username=root
password=123456
执行 supervisord -c /etc/supervisord.conf 即可启动守护进程
执行:supervisorctl status 即可列出服务的状态。
redis RUNNING pid 19135, uptime 0:03:42
注意:
supervisor 比较适合监控业务应用,且只能监控前台程序(进程必须以非daemon方式运行),php fork方式实现的daemon不能用它监控,
否则supervisor> status 会提示:BACKOFF Exited too quickly(process log may have details)
经过适当的修改后,redis、nginx、mysql、tomcat都可以使用supervisor来监控。
注意:
每次修改完/etc/supervisord.conf ,需要执行supervisorctl reload来重启supervisord进程,不然修改的配置无法生效。
启动supervisord
supervisord -c /etc/supervisord.conf
关闭supervisord
supervisorctl shutdown
重新载入配置
supervisorctl reload
supervisor组件说明:
supervisord
supervisord是supervisor的服务端程序。
干的活:启动supervisor程序自身,启动supervisor管理的子进程,响应来自clients的请求,重启闪退或异常退出的子进程,把子进程的stderr或stdout记录到日志文件中,生成和处理Event
supervisorctl
这东西还是有点用的,如果说supervisord是supervisor的服务端程序,那么supervisorctl就是client端程序了。
supervisorctl有一个类型shell的命令行界面,我们可以利用它来查看子进程状态,启动/停止/重启子进程,获取running子进程的列表等等。。。
最牛逼的一点是,supervisorctl不仅可以连接到本机上的supervisord,还可以连接到远程的supervisord,当然在本机上面是通过UNIX socket连接的。
supervisorctl和supervisord之间的通信,是通过xml_rpc完成的,远程是通过TCP socket连接的。
supervisorctl和supervisord之间的通信,是通过xml_rpc完成的。相应的配置在[supervisorctl]块里面
Web Server
Web Server主要可以在界面上管理进程,Web Server其实是通过XML_RPC来实现的,可以向supervisor请求数据,也可以控制supervisor及子进程。配置在[inet_http_server]块里面
XML_RPC接口
这个就是远程调用的,上面的supervisorctl和Web Server就是它弄的
#####下面是几个测试没问题的样例,自己测试supervisor启动 redis mysqld nginx tomcat都没问题。
[inet_http_server]
;注意:需要配置防火墙只允许公司的IP访问9001端口
port=*:9001
username=sup_admin
password=flzxsqc@!@#$
[program:redis]
;注意:使用 supervisor 来监控redis自启动的话,必须设置daemonize no,不然会报错。
command=/usr/local/redis/bin/redis-server/usr/local/redis/etc/redis.conf
autorstart=true
autorestart=true
stdout_logfile=/tmp/supervisor_redis.log
[program:mariadb]
command=/usr/local/mariadb/bin/mysqld --basedir=/usr/local/mariadb --datadir=/data/ mysql--plugin-dir=/usr/local/mariadb/lib/plugin --user=mariadb --log-error=/data/mysql/mariadb.err --pid-file=/data/mysql/mariadb.pid --socket=/tmp/mysql.sock --port=3306
autostart=true
autorestart=true
stdout_logfile=/tmp/supervisor_mariadb.log
[program:nginx]
;注意:使用 supervisor 来监控nginx自启动的话,必须修改nginx.conf 在前几行添加上daemon off;
command=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
autostart=true
autorestart=true
sutdout_logfile=/tmp/supervisor_nginx.log
[program:tomcat7]
command=/usr/local/tomcat/bin/catalina.sh run
autorstart=true
user=webserver
autorestart=true
stdout_logfile=/tmp/supervisor_tomcat7.log
做到这里,还要给supervisor添加个开机自启动啊。
各种自启动脚本的地址:https://github.com/Supervisor/initscripts
下面是一个自己写的功能简陋的脚本:
#!/bin/bash
# chkconfig: 345 83 04
# description: Supervisor start stop script
start() {
/usr/bin/supervisord -c /etc/supervisord.conf
}
stop() {
/usr/bin/supervisorctl shutdown
}
restart() {
stop
start
}
reload() {
/usr/bin/supervisorctl reload
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
esac
其它的可以参考下面2篇文章:
http://lixcto.blog.51cto.com/4834175/1539136
http://www.phpddt.com/php/supervisor.html