Supervisor是Linux下用python写的一个进程监控程序,它的出现是为了满足以下需求,假设我有一个进程需要每时每刻的跑,但是这个进程又可能由于各种原因有可能中断,当进程中断的时候我希望能够自动重新启动它,此时,就是这个工具的用武之地.
安装:
需要基于Python环境,安装前可能需要安装以下两个包
sudo apt-get install -y python-dev
sudo apt-get install -y libevent-dev
安装完成后使用
sudo pip install supervisor
配置:
首先在etc下新建一个supervisord.conf文件,
touch supervisord.conf
需要修改权限,最简单的是chmod 777
chmod 777 supervisord.conf
然后生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
测试:
先写个简单脚本
#! /usr/local/bin/python 2 import time 3 4 time.sleep(120) 5 print 'hello'
赋予执行权限
chmod a+x hello.py
修改配置文件
vim /etc/supervisord.conf
[program:hello] 12 command=python /home/xiao/test/hello.py 13 autorestart=true 14 directory=/home/xiao/test/ 15 redirect_stderr=true
执行:
Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:
supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,并按新的配置启动、管理所有进程。
supervisorctl status 查看监控了什么程序
注意programxxx之间不要空格,例如programhello
可视化操作:
在conf文件里有个unix_http_server在里面进行修改
输入http://localhost:9001
ps -ef | grep python 用这个查看进程信息
配置文件
键入: vim /etc/supervisord.conf
在文件的末尾添加一个storm ui程序监控,配置如下:
;storm ui
[program:ui]
command=/usr/storm/storm/ui-sv.sh ;被监控程序指定的运行脚本
directory=/usr/storm/storm ;被监控程序运行的路径
autostart=false ;是否随supervisord进程启动而启动,包括reloadconf
autorestart=true ;被监控程序异常中断是否自动重启
startsecs=5 ;被监控程序启动时持续时间
startretries=5 ;被监控程序启动失败重试的次数
redirect_stderr=true ;是否重定向std err
stdout_logfile=/tmp/ui-sv.log ;stdou 重定向输出文件
stdout_events_enabled=true ;是否允许stdout事件
stopsignal=QUIT ;被监控程序kill的信号
如果command的栏运行的是shell脚本,那么在shell 脚本启动被监控程序时要用exec修饰。例如:
#!/bin/bash
exec /home/scott/install/storm/storm-0.9.0.1/bin/stormnimbus
否则,supervisord停止不了启动的进程.除此之外,shell脚本里不能出现&之类的后台运行符号。
supervisord开机自启动
chkconfig --add supervisord #加为服务
运行ntsysv,选中supervisord启动系统时跟着启动。