linux spervisor監控程序,設定守護
Supervisord是用Python實現的一款的程序管理工具,supervisord要求管理的程式是非守護程式,supervisord會幫你把它轉成daemon程式,因此如果用supervisord來管理程序,程序需要以非daemon的方式啟動。即程序啟動的時候需要是非守護程序的方式啟動。
例如:管理nginx的話,必須在nginx的配置檔案裡新增一行設定daemon off讓nginx以非守護程序方式啟動。
為每個流程例項編寫rc.d指令碼通常很不方便。 rc.d指令碼是程序初始化/自動啟動/管理的最低通用分母形式,但編寫和維護可能會很痛苦。此外,rc.d指令碼無法自動重新啟動崩潰的程序,並且許多程式在崩潰時無法正常重新啟動。Supervisord將程序作為其子程序啟動,並且可以配置為在崩潰時自動重新啟動它們。它還可以自動配置為在自己的呼叫上啟動程序。
Supervisord將程序作為子程序啟動,因此它始終知道其子程序的真正上/下狀態,並且可以方便地查詢此資料。
流程通常需要分組啟動和停止,有時甚至是“優先順序”。通常很難向人們解釋如何做到這一點。Supervisor允許您為程序分配優先順序,並允許使用者通過supervisorctl客戶端發出命令,如“start all”和“restart all”,以預先分配的優先順序順序啟動它們。此外,可以將流程分組為“流程組”,並且可以停止一組邏輯相關流程並將其作為一個單元啟動。主管為您提供一個啟動,停止和監控流程的位置。流程可以單獨控制,也可以成組控制。您可以將Supervisor配置為提供本地或遠端命令列和Web介面。
supervisord
伺服器主管名為supervisord。它負責在自己的呼叫中啟動子程式,響應來自客戶端的命令,重新啟動崩潰或退出的子程序,記錄其子程序stdout和stderr 輸出,以及生成和處理與子程序生命週期中的點相對應的“事件”。
伺服器程序使用配置檔案。這通常位於/etc/supervisord.conf中。此配置檔案是“Windows-INI”樣式配置檔案。通過適當的檔案系統許可權保持此檔案的安全非常重要,因為它可能包含未加密的使用者名稱和密碼。
supervisorctl
主管的命令列客戶端部分名為 supervisorctl。它為supervisord提供的功能提供了類似shell的介面。從 supervisorctl,使用者可以連線到不同的 supervisord程序(一次一個),獲取由子程序控制的狀態,停止和啟動子程序,並獲取supervisord的執行程序列表。
命令列客戶端通過UNIX域套接字或Internet(TCP)套接字與伺服器通訊。在允許客戶端執行命令之前,伺服器可以斷言客戶端的使用者應該提供身份驗證憑據。客戶端程序通常使用與伺服器相同的配置檔案,但其中包含[supervisorctl]部分的任何配置檔案都可以使用。
網路伺服器
與功能媲美A(稀疏)的Web使用者介面 supervisorctl可以通過瀏覽器,如果你開始訪問 supervisord對網際網路插座。在啟用配置檔案的[inet_http_server]部分後,訪問伺服器URL(例如http:// localhost:9001 /)以通過Web介面檢視和控制程序狀態。
cd /usr/local/src
wget https://pypi.python.org/packages/7b/17/88adf8cb25f80e2bc0d18e094fcd7ab300632ea00b601cbbbb84c2419eae/supervisor-3.3.2.tar.gz
tar -zxvf supervisor-3.3.2.tar.gz
cd supervisor-3.3.2
python setup.py install #本地python版本為python2.7
# python2.7 setup.py install #本地python版本為python3以上
二,配置
1.生成配置檔案
echo_supervisord_conf > /etc/supervisord.conf
2.啟動
supervisord -c /etc/supervisord.conf
檢視supervisord是否在執行:
ps aux | grep supervisord
3.配置
開啟配置檔案
vim /etc/supervisord.conf
在配置檔案底部,配置包括:
[include]
files=/etc/supervisor/*.conf #若你本地無/etc/supervisor目錄,請自建
用主管管理程序,配置如下:
cd /etc/supervisor
vim ossfs.conf # 這裡的檔名稱自定義
加入以下內容:
; 設定程序的名稱,使用 supervisorctl 來管理程序時需要使用該程序名
[program:your_program_name]
command=python server.py --port=9000
;numprocs=1 ; 預設為1
;process_name=%(program_name)s ; 預設為 %(program_name)s,即 [program:x] 中的 x
directory=/home/python/tornado_server ; 執行 command 之前,先切換到工作目錄
user=oxygen ; 使用 oxygen 使用者來啟動該程序
; 程式崩潰時自動重啟,重啟次數是有限制的,預設為3次
autorestart=true
redirect_stderr=true ; 重定向輸出的日誌
stdout_logfile = /var/log/supervisord/tornado_server.log
loglevel=info
這裡是啟動要配置的引數,請根據自己的專案自定義新增
更改了主管配置檔案,需要重啟,執行以下指令:
supervisorctl reload
4.supervisorctl的用法
supervisord : 啟動supervisor
supervisorctl reload :修改完配置檔案後重新啟動supervisor
supervisorctl status :檢視supervisor監管的程序狀態
supervisorctl start 程序名 :啟動XXX程序
supervisorctl stop 程序名 :停止XXX程序
supervisorctl stop all:停止全部程序,注:start、restart、stop都不會載入最新的配置檔案。
supervisorctl update:根據最新的配置檔案,啟動新配置或有改動的程序,配置沒有改動的程序不會受影響而重啟
5.若不使用控制檯來管理程序,用瀏覽器來管理,該如何配置?
開啟配置檔案
vim /etc/supervisord.conf
配置inet_http_server
[inet_http_server]
port=127.0.0.1:9001 ; 伺服器ip
username=xxx ;自定義
password=xxx ;自定義