Supervisor的伺服器端稱為supervisord,主要負責在啟動自身時啟動管理的子進程,響應用戶端的命令,重啟崩潰或退出的子進程,記錄子進程stdout和stderr輸出,產生和處理子進程生命週期中的事件。可以在一個設定檔中配置相關參數,包括Supervisord自身的狀態,其管理的各個子進程的相關屬性。設定檔一般位於/etc/supervisord.conf。
Supervisor的用戶端稱為supervisorctl,它提供了一個類shell的介面(即命令列)來使用supervisord服務端提供的功能。通過supervisorctl,使用者可以串連到supervisord伺服器處理序,獲得伺服器處理序控制的子進程的狀態,啟動和停止子進程,獲得正在啟動並執行進程列表。用戶端通過Unix域通訊端或者TCP通訊端與服務端進行通訊,伺服器端具有身份憑證認證機制,可以有效提升安全性。當用戶端和伺服器位於同一台機器上時,用戶端與伺服器共用同一個設定檔/etc/supervisord.conf,通過不同標籤來區分兩者的配置。
Supervisor也提供了一個web頁面來查看和管理進程狀態,這個功能用得人比較少。
官網:http://www.supervisord.org
一、安裝supervisord
$brew install supervisord
在mac下安裝要比linux下安裝方便的多。
二、配置
修改/usr/local/etc/supervisord.ini檔案,取消以下幾行注釋
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
這樣就可以通過瀏覽器對進行管理了。
三、添加一個新應用
建立一個a.php檔案,內容如下:
while(true){
echo 'a' . time() . "\r\n";
sleep(1);
}
然後在supervisord.ini檔案中添加以下幾行:
[program:php]
command=php /Users/sxf/web/a.php
autostart=true
autorestart=true
startsecs=1
startretries=3
redirect_stderr=true
stdout_logfile=/Users/sxf/web/supervisord.log
stderr_logfile=/Users/sxf/web/stderr.log
重啟supervisord。
$brew services restart supervisord
開啟瀏覽器http://127.0.0.9001,輸入使用者名稱和密碼,可以看此進程,可以對每個進程進行停止,重啟和重新整理操作。