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

Centos7下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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章