supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
先弄懂两个命令:
supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令
supervisorctl:启动supervisor的命令行窗口,在该命令行中可执行start、stop、status、reload等操作。
需求:redis-server这个进程是运行redis的服务。我们要求这个服务能在意外停止后自动重启。
安装(Centos):
yum install python-setuptools
easy_install supervisor
测试是否安装成功:
echo_supervisord_conf
创建配置文件:
echo_supervisord_conf > /etc/supervisord.conf
修改配置文件:
在supervisord.conf最后增加:
[program:redis]
command = redis-server //需要执行的命令
autostart=true //supervisor启动的时候是否随着同时启动
autorestart=true //当程序跑出exit的时候,这个program会自动重启
startsecs=3 //程序重启时候停留在runing状态的秒数
运行命令:
supervisord //启动supervisor
supervisorctl //打开命令行
[root@vm14211 ~]# supervisorctl
redis RUNNING pid 24068, uptime 3:41:55
ctl中: help //查看命令
ctl中: status //查看状态
遇到的问题:
1 redis出现的不是running而是FATAL 状态
应该要去查看log
log在/tmp/supervisord.log
2 日志中显示:
gave up: redis entered FATAL state, too many start retries too quickly
修改redis.conf的daemonize为no
使用supervisor之后,就不能自己随便的去自己重启服务了,否则会影响supervisor的监控,使用supervisorctl 里面start/stop/reload命令进行服务管理操作。
完成验证:
1 ps aux | grep redis
[root@vm1~]# ps aux | grep redis
root 30582 0.0 0.0 9668 1584 ? S 14:12 0:00 redis-server
2 kill 30582
3
[root@vm1 ~]# ps aux | grep redis
root 30846 0.0 0.0 9668 1552 ? S 15:19 0:00 redis-server
看到这个时候pid更新了。
web管理界面:
将supervisord.conf中[inet_http_server]部分做相应配置,在supervisorctl中reload即可启动web管理界面。
[inet_http_server] ; inet (TCP) server disabled by default
port=*: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))