轉載: www.leroyling.com/archives/Su…
程式管理工具Supervisor
Supervisor是用Python開發的一套通用的程式管理程式,能將一個普通的命令列程式變為後臺daemon,並監控程式狀態,異常退出時能自動重啟。它是通過fork/exec的方式把這些被管理的程式當作supervisor的子程式來啟動,這樣只要在supervisor的配置檔案中,把要管理的程式的可執行檔案的路徑寫進去即可。也實現當子程式掛掉的時候,父程式可以準確獲取子程式掛掉的資訊的,可以選擇是否自己啟動和報警。supervisor還提供了一個功能,可以為supervisord或者每個子程式,設定一個非root的user,這個user就可以管理它對應的程式。
Supervisor的安裝
(1)安裝Python包管理工具(easy_install)
ps 如果沒有安裝的話
yum install python-setuptools
複製程式碼
(2)安裝Supervisor
easy_install supervisor
複製程式碼
配置Supervisor應用守護
(1)通過執行echo_supervisord_conf程式生成supervisor的初始化配置檔案
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
複製程式碼
(2)然後新建一個conf.d的資料夾
mkdir /etc/supervisor/conf.d
複製程式碼
(3)然後檢視路徑下的supervisord.conf。
在檔案尾部新增如下配置。
...
;[include]
;files = relative/directory/*.ini
;conf.d 為配置表目錄的資料夾,需要手動建立
[include]
files = conf.d/*.conf
複製程式碼
(4)為你的程式建立一個.conf檔案,放在目錄"/etc/supervisor/conf.d/"下
touch your-application-name.conf
複製程式碼
配置檔案的內容如下
[program:your-application-name] ;程式名稱,終端控制時需要的標識
command= java -jar your-application-name.jar ; 執行程式的命令
directory=/root/your-application-pwd ; 你的程式所在的命令執行的目錄路徑
autorestart=true ; 程式意外退出是否自動重啟
stderr_logfile=/var/log/your-application-name.err.log ; 錯誤日誌檔案,路徑可以自己定義
stdout_logfile=/var/log/your-application-name.out.log ; 輸出日誌檔案,路徑可以自己定義
user=root ; 程式執行的使用者身份
stopsignal=INT
複製程式碼
(5)配置檔案搞定之後,執行supervisord,檢視是否生效
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep your-application-name
複製程式碼
ps 如果服務已啟動,修改配置檔案可用“supervisorctl reload”命令來使其生效
supervisorctl reload
複製程式碼
配置Supervisor開機啟動
(1)進入到以下目錄
cd /usr/lib/systemd/system
複製程式碼
(2)新建一個supervisord.service檔案
touch supervisord.service
複製程式碼
編輯檔案內容
[Unit]
Description=Supervisor
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
複製程式碼
(3) 執行命令
systemctl enable supervisord
複製程式碼
(4) 執行命令來驗證是否為開機啟動
systemctl is-enabled supervisord
複製程式碼
附錄-常用的相關管理命令
supervisorctl restart <application name> ;重啟指定應用
supervisorctl stop <application name> ;停止指定應用
supervisorctl start <application name> ;啟動指定應用
supervisorctl restart all ;重啟所有應用
supervisorctl stop all ;停止所有應用
supervisorctl start all ;啟動所有應用
複製程式碼