Centos7下supervisor浅入浅出-以kafka为例
前言
supervisor是一个Linux/Unix系统上的进程监控工具,supervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。不过同daemontools一样,它不能监控daemon进程,它不能监控daemon进程,,它不能监控daemon进程。
有时候程序老是挂(例如kafka,莫名其妙就自杀,日志还只有一个timeout),通过supervisor来检测进程状态,自启动进程
安装
yum -y install supervisor
配置文件详细
[program:aa]
command=python /root/temp/test_http.py 9999 ; 被监控的进程路径
directory=/root/temp ; 执行前要不要先cd到目录去,一般不用可以注释
priority=1 ; 数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启。。当然要选上了
startsecs ; 程序启动后等待多长时间后才认为程序启动成功
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
启动
#查看当前supervisord是否正常运行
ps -ef|grep supervisord
#若未启动,通过手动启动即可
supervisord -c /etc/supervisord.conf
命令
#查看所有进程状态
supervisorctl status
#停止program aa
supervisorctl stop aa
#启动program aa
supervisorctl start aa
#重启program aa
supervisorctl restart aa
#重载修改后的配置文件
supervisorctl update
#重新启动配置中的所有program(如果你有通过supervisoer守护的程序正在运行的时候,请慎重执行重启命令,否则会导致当前业务暂时中断)
supervisorctl reload
案例
以kafka为例,启动完成后不启动zookeeper和kafka
配置supervisor-zookeeper.conf
vim /etc/supervisord.d/zookeeper.conf
[program:zookeeper]
command =/data/kafka/bin/zookeeper-server-start.sh /data/kafka/config/zookeeper.properties
autostart = true
startsecs = 15
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /data/kafka/supervisor-zk.log
保存退出
配置supervisor-kafka.conf
vim /etc/supervisord.d/kafka.conf
[program:kafka]
command =/data/kafka/bin/kafka-server-start.sh /data/kafka/config/server.properties
autostart = true
startsecs = 15
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /data/kafka/supervisor-kafka.log
保存退出
重载supervisor
#重载配置(一般到这一步已经会自动启动了)
supervisorctl update
#重新启动配置中的所有program(如果你有通过supervisoer守护的程序正在运行的时候,请慎重执行重启命令,否则会导致当前业务暂时中断)
supervisorctl reload
问题整理
问题①
如果之前通过daemon启动了配置中的进程的话,请先手动kill,否则supervisoer会在重载配置 重新启动的时候报错。
问题②
yum 安装的supervisor启动报错
/usr/lib/python2.7/site-packages/supervisor/options.py:383: PkgResourcesDeprecationWarning: Parameters to load are deprecated. Call .resolve and .require separately.
return pkg_resources.EntryPoint.parse("x="+spec).load(False)
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
我是这么解决的
yum remove -r supervisor
easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf
vim /etc/supervisord.conf
取消注释
[include]
;files = relative/directory/*.ini
files = /etc/supervisord.d/*.conf
1768

被折叠的 条评论
为什么被折叠?



