Supervisor
使用b/s架構、運作在類Unix系統上一個程序監控管理系統。
它可以使程序以daemon方式運作,并且一直監控程序,在意外退出時能自動重新開機程序。
<b>安裝</b>
Supervisor是使用python開發的一個程序管工具,安裝和使用都非常簡單。使用 pip 或者 easy_install 安裝會非常友善,自動解決依賴關系。
pip的安裝請參考 Python pip 安裝使用教程
初識
安裝完成後系統會增加幾個指令
<code>supervisord</code> 用于啟動supervisor服務。
<code>supervisorctl</code> 用于管理supervisor服務,管理使用supervisor啟動的程序。
安裝好supervisor後需要手動的生成配置檔案。
supervisor預設讀取的配置檔案為/etc/supervisord.conf,建議将配置檔案放在此位置。
我們先簡單的檢視一下 supervisord.conf,配置檔案格式和ini格式配置檔案相同,由節、鍵、值組成,配置檔案注釋為<code>;</code>。
此節是配置連接配接supervisord的sock的檔案,包括sock檔案路徑,使用者認證。使用supervisorctl指令進行管理程序時,使用的就是此sock檔案。預設保持開啟,如将此項關閉[inet_http_server] 則無法使用。
此節配置supervisor的web管理界面,配置監聽的位址和端口,已經使用者認證。預設為關閉狀态。如需開啟則将此節注釋去掉,然後修改相應的鍵值。
此節為配置supervisor服務參數,例如日志,日志大小等一些參數。
用于配置supervisorctl管理程式參數,例如sock檔案路徑,需要和[unix_http_server]相同。
此節作用為包含其他配置檔案,本文建議開啟此項,包含額外的配置檔案,将需要管理的程序配置寫入到額外的配置檔案,不需要經常編輯主配置檔案,保證安全性。修改代碼為
讀取/etc/supervisor.d/檔案夾下所有字尾為conf的檔案。
第一步
配置第一個使用supervisord管理的程式
我們使用 python2.7來作為示範,使用SimpleHTTPServer子產品友善快速的啟動一個http server。
1,建立配置檔案 /etc/supervisor.d/test1.conf,寫入一下内容
這是一個最簡單的例子,第一行指定目前配置的程式名稱。第二行程式運作指令(20080 為 http server端口号)。
2,第一個程式已經配置好,接下來就可以啟動supervisord來檢視一下效果。
輸入指令 <code>sudo supervisord</code> 即可啟動服務。
很多機器會列印出幾行資訊,這并不代表程式出錯,意思是
3,現在使用<code>ps -ef | grep python</code>來檢查一下剛才配置的程式是否已經啟動。到此為止我們的第一步已經完成。
詳細配置

必要參數隻有 command,其他未可選參數。
[program:x] 自定義的程式名不能重複
配置示例
管理tornado應用
需要啟動4個程序,分别監聽四個連續端口(20081 – 20084)。
将錯誤輸出定向到标準輸出,每個端口标準輸出寫入到不同檔案中,單個檔案最大50MB,最多儲存3個備份。
啟動前等待3秒。
supervisord啟動時自動啟動。程式運作出錯自動重新開機,最大嘗試重新開機次數3次。
管理nginx
nginx預設運作狀态是背景運作程式。supervisord不能管理此類程式需要,需要修改nginx主配置檔案。
在nginx最外層加入<code>daemon off</code>;
最簡單的配置。
supervisorctl
supervisor程序管理工具,可以友善啟動停止程序,檢視程式日志,重新載入配置檔案。
如果supervisord配置檔案不再預設位置,使用supervisorctl工具時需要指定配置檔案路徑 <code>supervisordctl -c 配置檔案路徑</code>
常用指令
<code>start stop restart + all</code> 表示啟動,關閉,重新開機所有程序。
如果一個程序啟動了多個副本,例如上文tornado-test,關閉所有副本。
原文釋出時間為:2016-11-30
本文作者:gw1770df