1. 程式人生 > >使用Python的Supervisor進行程序監控以及自動啟動

使用Python的Supervisor進行程序監控以及自動啟動

supervisor就是用Python開發的一套通用的程序管理程式,能將一個普通的命令列程序變為後臺daemon,並監控程序狀態,異常退出時能自動重啟。

先弄懂兩個命令:

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))