使用Python的Supervisor进行进程监控以及自动启动

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))


你可能感兴趣的:(服务器)