使用Supervisor管理進程

1.  Superivisor簡介:

    Supervisor是一個C/S系統,它允許用戶在類UNIX系統上監控和管理一系列的進程。你可以把一個進程以Daemon的形式用Supervisor來管理。


2.  安裝:

    使用pip來安裝Supervisor:

[root@test1 ~]# pip install supervisor

    如果CentOS系統中沒用安裝pip,可以通過如下命令安裝pip:

[root@test1 ~]# yum -y install python-pip


3.  配置文件:

    Supervisor的配置文件需要手動執行命令來生成,如下:

[root@test1 ~]# echo_supervisord_conf > /etc/supervisord.conf


4.  常用的配置項:

command=/bin/cat                 ---- 啓動程序時執行的命令;
directory=/tmp                   ---- 執行目錄,若有/home/test/test1.py,將directory設置成/home/test,則command只需設置成python test1.py。否則command必須設置成絕對路徑;
process_name=%(program_name)s     ---- 進程啓動,使用program name作爲進程名,默認值;
autostart=true                   ---- 隨Supervisor啓動一起啓動;
startsecs=1                      ---- 延時啓動,默認爲1;
startretries=3                   ---- 啓動失敗時的重試次數,默認爲3;
user=root                        ---- 以root身份運行程序;
priority=999                     ---- 優先級。值越高,最後啓動,最先被關閉,默認值999。


5.  命令:

Supervisor有兩個可執行程序 :supervisord 和 supervisorctl。

    supervisord用來依據配置文件的策略管理後臺守護進程;

    supervisorctl管理員用於向後臺守護進程發送“啓動/重啓/停止”等指令。


6.  一個例子,使用Supervisor管理一個Python Flask程序hello.py:

[program:flasky]
directory=/opt/flasky/
command=/opt/flasky/venv/bin/python hello.py runserver --host 192.168.1.101 -p 8080
autostart=true
startsecs=10
startretries=2
user=root
stderr_logfile=/tmp/flasky-error.log
stdout_logfile=/tmp/flasky-error.log


7.  啓動Supervisord:

[root@test1 ~]# /usr/bin/supervisord -c /etc/supervisord.conf


8.  查看進程狀態:

[root@test1 ~]# /usr/bin/supervisorctl status
flasky                           STARTING                           
[root@test1 ~]# /usr/bin/supervisorctl status
flasky                           RUNNING   pid 46778, uptime 0:00:10
[root@test1 ~]# /usr/bin/supervisorctl status
flasky                           RUNNING   pid 46778, uptime 0:00:13


9.  Supervisorctl管理命令:

supervisorctl status                ---- 查看supervisor管理進程的狀態;
supervisorctl stop programname      ---- 用來關閉某個進程,programname指上例中的flasky;
supervisorctl start programname     ---- 用來啓動某個進程;
supervisorctl restart programname   ---- 用來重啓某個進程;
supervisorctl stop all              ---- 關閉所有的進程;
supervisorctl reload                ---- 停止所有進程,載入最新的配置文件,並根據最新的配置啓動、管理進程;
supervisorctl update                ---- 根據最新的配置文件,啓動新配置的進程或重啓配置有變化的進程,沒有改動過的進程不會受到影響;
supervisorctl shutdown              ---- 關閉supervisor服務。



    曾經有一次面試,面試官提問:“有一個腳本,如何讓它在開機之後一小時的時候開始執行?”

    我答:“在腳本開頭加上‘sleep 3600’,再把腳本加入rc.d目錄開機啓動。”

    其實,用Supervisor就可以更合理地實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章