superlance先容
Supervisord支持的Event
PROCESS_STATE 进程状态发生改变

PROCESS_STATE_STARTING 进程状态从其他状态转换为正在启动(Supervisord的配置项中有startsecs配置项, 是指程序启动时须要程序至少稳定运行x秒才认为程序运行正常,在这x秒中程序状态为正在启动)
PROCESS_STATE_RUNNING 进程状态由正在启动转换为正在运行
PROCESS_STATE_BACKOFF 进程状态由正在启动转换为失落败
PROCESS_STATE_STOPPING 进程状态由正在运行转换为正在停滞
PROCESS_STATE_EXITED 进程状态由正在运行转换为退出
PROCESS_STATE_STOPPED 进程状态由正在停滞转换为已经停滞(exited和stopped的差异是exited是程序自行退出,而stopped为人为掌握其退出)
PROCESS_STATE_FATAL 进程状态由正在运行转换为失落败
PROCESS_STATE_UNKNOWN 未知的进程状态
REMOTE_COMMUNICATION 利用Supervisord的RPC接口与Supervisord进行通信
PROCESS_LOG 进程产生日志输出,包括标准输出和标准缺点输出
PROCESS_LOG_STDOUT 进程产生标准输出
PROCESS_LOG_STDERR 进程产生标准缺点输出
PROCESS_COMMUNICATION 进程的日志输出包含 和
PROCESS_COMMUNICATION_STDOUT 进程的标准输出包含 和
PROCESS_COMMUNICATION_STDERR 进程的标准缺点输出包含 和
SUPERVISOR_STATE_CHANGE_RUNNING Supervisord 启动
SUPERVISOR_STATE_CHANGE_STOPPING Supervisord 停滞
TICK_5 每隔5秒触发
TICK_60 每隔60秒触发
TICK_3600 每隔3600触发
PROCESS_GROUP Supervisord的进程组发生变革
PROCESS_GROUP_ADDED 新增了Supervisord的进程组
PROCESS_GROUP_REMOVED 删除了Supervisord的进程组
pip install superlance
二:案例先容
#案例
1)supervisord 管理监控脚本 monitor.sh ,后台运行
2)监控脚本,扫描监控,业务进程状态,
cat /etc/supervisord.d/listener.conf
[eventlistener:nginx-exited]
command=/bin/bash /tmp/monitor.sh
events=PROCESS_STATE_EXITED
redirect_stderr=false
stdout_logfile = /tmp/listener.stdout.log
stderr_logfile = /tmp/listener.stderr.log
#/tmp/monitor.sh
#!/bin/bash
while true
do
sleep 1
isok="`ps -ef|grep -v group |grep group.sh|wc -l`"
if [ $isok -lt 1 ]
then
echo "`date`" >>/tmp/alert.log
#curl post
#send alert
/bin/bash /tmp/group.sh
fi
done
#group.sh
#!/bin/bash
while true
do
sleep 30
done
#mon.sh 监控脚本
#!/usr/bin/env bashwhile truedo exist=`ps -ef | grep 'httpldlog' | grep -v grep | wc -l` if [ $exist -eq 0 ] then echo `date '+%F %T not exist'` ./httpldlog>/dev/null 2>&1 & else sleep 10s fidone
三:supervisor安装支配
利用技巧
apt-get install supervisor
/etc/supervisor/conf.d
cat /etc/supervisor/conf.d/filebeat.conf
[program:filebeat]
directory=/data/filebeat
command=/data/filebeat/filebeat -c /data/filebeat/filebeat.yml
;user=ledou00
autorestart=true
redirect_stderr=true
stdout_logfile=/data/log/supervisord/filebeat.log
mkdir -p /data/log/supervisord
chmod -R 777 /data/log/supervisord
#nginx
supervisorctl update
supervisorctl status
supervisorctl restart nginxsvr
启动 supervisor 做事
/etc/init.d/supervisor start
做事名:filebeat
查看单个任务状态: supervisorctl status 做事名
supervisorctl start 做事名
supervisorctl stop 做事名
supervisorctl restart 做事名
supervisorctl update
#
supervisorctl update
filebeat: added process group
supervisorctl start filebeat
filebeat: started
#添加模块
守护进程 php /data/wwwroot/fanbook-service-http-api/cmd/LogCenterController.php consume
1.进入目录 /etc/supervisor/conf.d
2.编辑配置文件 vi LogCenterController.conf (user 指定用户运行程序)
[program:LogCenterController]
directory=/data/wwwroot/fanbook-service-http-api/cmd
command=php /data/wwwroot/fanbook-service-http-api/cmd/LogCenterController.php consume
user=ubuntu
autorestart=true
redirect_stderr=true
stdout_logfile=/data/log/supervisord/LogCenterController.log
4.更新做事,默认是所有
supervisorctl update
filebeat: stopped
filebeat: updated process group
LogCenterController: added process group
更新指定做事
supervisorctl update LogCenterController
LogCenterController: stopped
LogCenterController: updated process group
5.检讨状态
supervisorctl status
supervisorctl status LogCenterController
6.启动做事
supervisorctl start LogCenterController
#Supervisor只能管理非daemon的进程,也便是说Supervisor不能管理守护进程
#nginx 守护提示端口占用
#关闭 daemon off
cat /etc/supervisor/conf.d/nginxsvr.conf
[program:nginxsvr]
directory=/usr/local/nginx
;command=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
command=/usr/local/nginx/sbin/nginx -g 'daemon off;'
;user=ledou00
autorestart=true
redirect_stderr=true
stdout_logfile=/data/log/supervisord/nginxsvr.log