Supervisor是Linux下用python寫的一個進程監控程序,它的出現是爲了知足如下需求,假設我有一個進程須要每時每刻的跑,可是這個進程又可能因爲各類緣由有可能中斷,當進程中斷的時候我但願可以自動從新啓動它,此時,就是這個工具的用武之地.python
安裝:shell
須要基於Python環境,安裝前可能須要安裝如下兩個包vim
sudo apt-get install -y python-devbash
sudo apt-get install -y libevent-dev工具
安裝完成後使用測試
sudo pip install supervisorui
配置:spa
首先在etc下新建一個supervisord.conf文件,命令行
touch supervisord.conf3d
須要修改權限,最簡單的是chmod 777
chmod 777 supervisord.conf
而後生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
測試:
先寫個簡單腳本
#! /usr/local/bin/python 2 import time 3 4 time.sleep(120) 5 print 'hello'
賦予執行權限
chmod a+x hello.py
修改配置文件
vim /etc/supervisord.conf
[program:hello] 12 command=python /home/xiao/test/hello.py 13 autorestart=true 14 directory=/home/xiao/test/ 15 redirect_stderr=true
執行:
Supervisord安裝完成後有兩個可用的命令行supervisor和supervisorctl,命令使用解釋以下:
supervisord,初始啓動Supervisord,啓動、管理配置中設置的進程。
supervisorctl stop programxxx,中止某一個進程(programxxx),programxxx爲[program:chatdemon]裏配置的值,這個示例就是chatdemon。
supervisorctl start programxxx,啓動某個進程
supervisorctl restart programxxx,重啓某個進程
supervisorctl stop all,中止所有進程,注:start、restart、stop都不會載入最新的配置文件。
supervisorctl reload,載入最新的配置文件,並按新的配置啓動、管理全部進程。
supervisorctl status 查看監控了什麼程序
注意programxxx之間不要空格,例如programhello
可視化操做:
在conf文件裏有個unix_http_server在裏面進行修改
輸入http://localhost:9001
ps -ef | grep python 用這個查看進程信息
配置文件
鍵入: vim /etc/supervisord.conf
在文件的末尾添加一個storm ui程序監控,配置以下:
;storm ui
[program:ui]
command=/usr/storm/storm/ui-sv.sh ;被監控程序指定的運行腳本
directory=/usr/storm/storm ;被監控程序運行的路徑
autostart=false ;是否隨supervisord進程啓動而啓動,包括reloadconf
autorestart=true ;被監控程序異常中斷是否自動重啓
startsecs=5 ;被監控程序啓動時持續時間
startretries=5 ;被監控程序啓動失敗重試的次數
redirect_stderr=true ;是否重定向std err
stdout_logfile=/tmp/ui-sv.log ;stdou 重定向輸出文件
stdout_events_enabled=true ;是否容許stdout事件
stopsignal=QUIT ;被監控程序kill的信號
若是command的欄運行的是shell腳本,那麼在shell 腳本啓動被監控程序時要用exec修飾。例如:
#!/bin/bash
exec /home/scott/install/storm/storm-0.9.0.1/bin/stormnimbus
不然,supervisord中止不了啓動的進程.除此以外,shell腳本里不能出現&之類的後臺運行符號。
supervisord開機自啓動chkconfig --add supervisord #加爲服務運行ntsysv,選中supervisord啓動系統時跟着啓動。