Supervisor 程式管理工具

weixin_34205076發表於2017-11-27

supervisor

1.介紹

Supervisor是一個用 Python 寫的程式管理工具,可以很方便的用來啟動、重啟、關閉程式(不僅僅是 Python 程式)。除了對單個程式的控制,還可以同時啟動、關閉多個程式,比如很不幸的伺服器出問題導致所有應用程式都被殺死,此時可以用 supervisor 同時啟動所有應用程式而不是一個一個地敲命令啟動。

2.安裝

提供以下兩種安裝方法:

  • # pip install supervisor

  • # tar zxvf supervisor-3.1.3.tar.gz
    # cd supervisor
    # python setup.py install

3.配置

  • 生成配置檔案 
    # echosupervisordconf > /etc/supervisord.conf

  • 更改配置檔案,這裡以tomcat,ismsrvdebug為例 
    # vim /etc/supervisord.conf 
    # program配置 
    [program:tomcat] 
    directory = /opt/tomcat
    app/bin ; 程式的啟動目錄 
    command = sh startup.sh ; 啟動命令,可看出與手動在命令列啟動的命令是一樣的
    autostart = true ; 在 supervisord 啟動的時候也自動啟動 
    startsecs = 10 ; 啟動10秒後沒有異常退出,就當作已經正常啟動了
    autorestart = true ; 程式異常退出後自動重啟 
    startretries = 3 ; 啟動失敗自動重試次數,預設是 3
    user = root ; 用哪個使用者啟動
    redirectstderr = true ; 把 stderr 重定向到 stdout,預設 false
    stdoutlogfilemaxbytes = 20MB ; stdout 日誌檔案大小,預設 20MB
    stdout
    logfilebackups = 20 ; stdout 日誌檔案備份數
    stdout
    logfile = /opt/supervisor-3.1.3/super.log ; stdout 日誌檔案,需要注意當指定目錄不存在時無法正常啟動,所以需要手動建立目錄(supervisord 會自動建立日誌檔案)
    ;environment = PYTHONPATH=$PYTHONPATH:/opt/mypy

  • 更改tomcat配置
    使用Supervisord監控管理的程式必須以nodaemon啟動,即不能為後臺守護程式。而tomcat的startup.sh指令碼是daemon方式的,所以需要更改配置檔案。 
    # vim /opt/tomcat_app/bin/startup.sh 
    (將start改為run) 
    exec "$PRGDIR"/"$EXECUTABLE" run "$@"

4.啟動

# supervisord -c /etc/supervisord.conf 啟動Supervisor 
# supervisorctl status 檢視狀態 
# supervisorctl reload 重新載入配置檔案 
# supervisorctl start tomcat 啟動專案
# supervisorctl stop tomcat 關閉專案 
# supervisorctl restart tomcat 重啟專案

5.驗證

# ps -ef | grep tomcat 檢視,未啟動tomcat
# 啟動Supervisor # ps -ef | grep tomcat Supervisor啟動的時候也會啟動tomcat
# 模擬 kill掉tomcat程式。
# ps -ef | grep tomcat 檢視會發現tomcat被自動拉起,程式號改變了

6.注意

可以把所有配置項都寫到 supervisord.conf 檔案裡,但並不推薦這樣做,而是通過 include 的方式把不同的程式(組)寫到不同的配置檔案裡。我們新建一個目錄 /etc/supervisor/ 用於存放這些配置檔案。

# vim /etc/supervisord.conf
[include]
files = /etc/supervisor/*.conf

建立配置檔案管理program。
一份配置檔案至少需要一個 [program:x] 部分的配置,來告訴 supervisord 需要管理那個程式。



本文轉自 周新宇1991 51CTO部落格,原文連結:http://blog.51cto.com/zhouxinyu1991/1791076,如需轉載請自行聯絡原作者

相關文章