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