Supervisor是一個進程監控程序。
需求一:我現在有一個進程需要每時每刻不斷的跑,但是這個進程又有可能由於各種原因有可能中斷。當進程中斷的時候我希望能自動重新啟動它,此時,我就需要使用到了Supervisor
先弄懂兩個命令:
supervisord : supervisor的服務器端部分,啟動supervisor就是運行這個命令
supervisorctl:啟動supervisor的命令行窗口。
需求二:redis-server這個進程是運行redis的服務。我們要求這個服務能在意外停止后自動重啟。
安裝(Centos下):
yum install python-setuptools
easy_install supervisor
測試是否安裝成功:
echo_supervisord_conf
創建配置文件:
sudo su#切換到root用戶,不然提示無權限
echo_supervisord_conf > /etc/supervisord.conf
修改配置文件:
在supervisord.conf最后增加:
[program:redis]
command = redis-server //需要執行的命令
autostart=true //supervisor啟動的時候是否隨着同時啟動
autorestart=true //當程序跑出exit的時候,這個program會自動重啟
startsecs=3 //程序重啟時候停留在runing狀態的秒數
(更多配置說明請參考:http://supervisord.org/configuration.html)
運行命令:
supervisord //啟動supervisor
supervisorctl//打開命令行
結果:
redis RUNNING pid 24068, uptime 3:41:55
ctl中: help //查看命令
ctl中: status //查看狀態
遇到的問題:
Q: redis出現的不是running而是FATAL 狀態
A: 應該要去查看log,log在/tmp/supervisord.log
Q: 日志中顯示:gave up: redis entered FATAL state, too many start retries too quickly
A: 修改redis.conf的daemonize為no
具體說明:http://xingqiba.sinaapp.com/?p=240
事實證明webdis也有這個問題,webdis要修改的是webdis.json這個配置文件
完成驗證:
ps aux | grep redis
[root@vm1~]# ps aux | grep redis
root 30582 0.0 0.0 9668 1584 ? S 14:12 0:00 redis-server
kill 30582
[root@vm1 ~]# ps aux | grep redis
root 30846 0.0 0.0 9668 1552 ? S 15:19 0:00 redis-server
看到這個時候pid更新了。