Ubuntu下Supervisor安裝、配置和使用,解決後臺被中斷
前言
伺服器上執行專案時遇到某些指令碼需要後臺程序執行,並保證不被中斷,之前都是通過nohup、&來實現,但還是會遇到終端的情況,很煩,所以找到了Supervisor。關於Supervisor網上的介紹大致如下:
Supervisor是用Python開發的一套通用的程序管理程式,能將一個普通的命令列程序變為後臺daemon,並監控程序狀態,異常退出時能自動重啟。它是通過fork/exec的方式把這些被管理的程序當作supervisor的子程序來啟動,這樣只要在supervisor的配置檔案中,把要管理的程序的可執行檔案的路徑寫進去即可。也實現當子程序掛掉的時候,父程序可以準確獲取子程序掛掉的資訊的,可以選擇是否自己啟動和報警。supervisor還提供了一個功能,可以為supervisord或者每個子程序,設定一個非root的user,這個user就可以管理它對應的程序。
廢話不多說了,開始教程。
1、安裝supervisor
apt-get install supervisor
2、生成預設的配置檔案
echo_supervisord_conf > /etc/supervisor/supervisord.conf
3、修改預設配置檔案,指定配置檔案規則及路徑
修改配置檔案最後部分,去掉","並設定為如下所示。
詳細的配置及說明,請參考官方文件 介紹。
[include] files = /etc/supervisor/conf.d/*.conf;可以指定一個或多個以.conf結束的配置檔案
4、配置管理程序
建立程序配置檔案(以KCPTUN為例)
vim /etc/supervisor/conf.d/kcptun.conf
配置內容如下:
[program:kcptun] command = /home/kcptun/server_linux_amd64 -l :20013 -t 127.0.0.1:9310 --key Lzz_013942 --crypt salsa20 --mode fast user= root autostart = true autorestart = true
5、啟動Supervisor服務
supervisord -c /etc/supervisor/supervisord.conf
6、控制程序
supervisord啟動成功後,可以通過supervisorctl客戶端控制程序,啟動、停止、重啟。
supervisord
執行supervisorctl命令,不加引數,會進入supervisor客戶端的互動終端,並會列出當前所管理的所有程序。
supervisorctl常用命令:
supervisorctl stop program_name 停止某個程序
supervisorctl start program_name啟動某個程序
supervisorctl restart program_name重啟某個程序
supervisorctl stop all停止全部程序
supervisorctl reload載入最新的配置檔案,停止原有程序並按新的配置啟動、管理所有程序
supervisorctl update根據最新的配置檔案,啟動新配置或有改動的程序,配置沒有改動的程序不會受影響而重啟