還在用nohup? 來試試Supervisor吧 -Linux後臺執行

sumu蘇沐發表於2019-12-04

轉載: 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 ;啟動所有應用

複製程式碼

相關文章