0. 前言
0.1 supervisor简介
Supervisor是用Python实现的一款非常实用的进程管理工具,可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦崩溃会自动重启,但是supervisor管理的进程必须由supervisord来启动,并且管理的程序必要是非Daemon程序,Supervisor会帮你把它转化为Daemon程序,比如想要使用Supervisor来管理Nginx进程,就必须在Nginx配置文件中加入 daemon off让Nginx以非Daemon方式运行。
0.2 软硬件环境
OS:CentOS6.6 x86_64
Python:2.6.6
setuptools:1.4.2
supervisor:3.1.3
1. 安装
1.1 安装setuptools
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar -xvf setuptools-1.4.2.tar.gz
cd setuptools-1.4.2
python setup.py install
1.2 安装python-meld3
yum install python-meld3 -y
1.3 安装supervisor
easy_install supervisor #安装supervisor
echo_supervisord_conf > /etc/supervisord.conf #生成配置文件
2. 配置supervisor
修改 /etc/supervisord.conf文件,去掉inet_http_server段的注释,并且改为如下:
[inet_http_server] port=-0.0.0.0:9001 username=admin password=123456 |
这样就可以用admin/123456登录http://YOUR_IP:9001来通过页面进行操作了。
3. 使用supervisor
编写一个测试脚本,用来验证使用过程,脚本名为ping_ip.sh,文件路径/root/ping_ip.sh,内容如下:
#!/bin/bash while true do ping -c 1 192.168.35.174 >> /tmp/ping.log sleep 5 done |
说明:每隔5秒钟ping一下192.168.35.174,并将输出写入ping.log。并且需要确保这个脚本一直处于运行状态。
下面演示如何通过supervisor管理这个脚本,并确保其始终处于运行状态。
在/etc/supervisord.conf中写入如下内容:
[program:ping] #ping是我们自定义的程序名,需要注意program后面的冒号 command=/bin/bash /root/ping_ip.sh #执行的命令,用于启动进程。需要注意的是,这个命令只能是在终端中运行的进程,而不能是守护进程,因为supervisor需要将其作为子进程进行管理。所以像service vsftpd start这样的命令是不行的,不能作为supervisor的子进程进行管理。 process_name=ping #进程名,默认就是program配置的程序名。如果下面的numprocs设置为1,此处就不用设置了;如果numprocs设置为大于1,就需要给每隔子进程设置一个名字了。 numprocs=1 #子进程个数 startsecs=0 #子进程启动多少秒后,如果状态处于running,则认为启动成功 stopwaitsecs=0 #向子进程发送stop信号之后,到系统返回信息给supervisord所等待的最大时间,超过这个时间,supervisord会向该子进程发送一个强制kill的信号 autostart=true #supervisord启动的时候,是否也自动启动这个子进程 autorestart=true #这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 stopsignal=KILL #进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号 stdout_logfile=/tmp/ping.log #日志文件路径 stderr_logfile=/tmp/ping.err #错误日志文件路径 |
1.1 命令行管理
[[email protected] ~]# supervisorctl status #查看supervisor状态
ping RUNNING pid 32935, uptime 0:00:02
[[email protected] ~]# supervisorctl stop ping #停止子进程ping
ping: stopped
[[email protected] ~]# supervisorctl status
ping STOPPED Apr 28 06:00 PM
[[email protected] ~]# supervisorctl start ping #启动子进程ping
ping: started
[[email protected] ~]# supervisorctl status
ping RUNNING pid 33065, uptime 0:00:02
其他用法请查看帮助手册:supervisorctl --help
1.2 图形界面管理
访问:http://192.168.35.174:9001/,输入用户名/密码之后,即可在图形界面上看到的子进程的运行状态,并且可以进行操作。