Supervisor是Linux下用python写的一个进程监控程序,它的出现是为了知足如下需求,假设我有一个进程须要每时每刻的跑,可是这个进程又可能因为各类缘由有可能中断,当进程中断的时候我但愿可以自动从新启动它,此时,就是这个工具的用武之地.python
安装:shell
须要基于Python环境,安装前可能须要安装如下两个包vim
sudo apt-get install -y python-devbash
sudo apt-get install -y libevent-dev工具
安装完成后使用测试
sudo pip install supervisorui
配置:spa
首先在etc下新建一个supervisord.conf文件,命令行
touch supervisord.conf3d
须要修改权限,最简单的是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启动系统时跟着启动。