使用Python的Supervisor進行程序監控以及自動啟動
先弄懂兩個命令:
supervisord : supervisor的伺服器端部分,啟動supervisor就是執行這個命令
supervisorctl:啟動supervisor的命令列視窗,在該命令列中可執行start、stop、status、reload等操作。
需求:redis-server這個程序是執行redis的服務。我們要求這個服務能在意外停止後自動重啟。
安裝(Centos):
yum install python-setuptools
easy_install supervisor
測試是否安裝成功:
echo_supervisord_conf
建立配置檔案:
echo_supervisord_conf > /etc/supervisord.conf
修改配置檔案:
在supervisord.conf最後增加:
[program:redis]
command = redis-server //需要執行的命令
autostart=true //supervisor啟動的時候是否隨著同時啟動
autorestart=true //當程式跑出exit的時候,這個program會自動重啟
startsecs=3 //程式重啟時候停留在runing狀態的秒數
執行命令:
supervisord //啟動supervisor
supervisorctl //開啟命令列
[[email protected] ~]# supervisorctl
redis RUNNING pid 24068, uptime 3:41:55
ctl中: help //檢視命令
ctl中: status //檢視狀態
遇到的問題:
1 redis出現的不是running而是FATAL 狀態
應該要去檢視log
log在/tmp/supervisord.log
2 日誌中顯示:
gave up: redis entered FATAL state, too many start retries too quickly
修改redis.conf的daemonize為no
使用supervisor之後,就不能自己隨便的去自己重啟服務了,否則會影響supervisor的監控,使用supervisorctl 裡面start/stop/reload命令進行服務管理操作。
完成驗證:
1 ps aux | grep redis
[[email protected]~]# ps aux | grep redis
root 30582 0.0 0.0 9668 1584 ? S 14:12 0:00 redis-server
2 kill 30582
3
[[email protected] ~]# ps aux | grep redis
root 30846 0.0 0.0 9668 1552 ? S 15:19 0:00 redis-server
看到這個時候pid更新了。
web管理介面:
將supervisord.conf中[inet_http_server]部分做相應配置,在supervisorctl中reload即可啟動web管理介面。[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))