Supervisor是採用 Python(2.4+) 開發的,它是一個允許用戶管理 基於 Unix 系統進程的 Client/Server 系統,提供了大量功能來實現對進程的管理。安裝: 安裝完成之後,在 /ect/supervisor/conf.d/ 目錄下新建一個配置文件( touch Hell ...
Supervisor是採用 Python(2.4+) 開發的,它是一個允許用戶管理 基於 Unix 系統進程的 Client/Server 系統,提供了大量功能來實現對進程的管理。
安裝:
yum install supervisor
安裝完成之後,在 /ect/supervisor/conf.d/ 目錄下新建一個配置文件( touch HelloWebApp.conf ),取名為 HelloWebApp.conf
打開HelloWebApp.conf ( vim HelloWebApp.conf ),寫入如下命令:
[program:HelloWebApp] command=dotnet HelloWebApp.dll #要執行的命令 directory=/home/yxd/Workspace/publish #命令執行的目錄 environment=ASPNETCORE__ENVIRONMENT=Production #環境變數 user=www-data #進程執行的用戶身份 stopsignal=INT autostart=true #是否自動啟動 autorestart=true #是否自動重啟 startsecs=1 #自動重啟間隔 stderr_logfile=/var/log/HelloWebApp.err.log #標準錯誤日誌 stdout_logfile=/var/log/HelloWebApp.out.log #標準輸出日誌
配置好以後 ( :wq 保存退出),需要重新載入一下配置
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf
或者你可以直接重啟 Supervisor:
sudo service supervisor stop
sudo service supervisor start
如果啟動的時候報錯,可以打開位於/etc/log/supervisor/supervisord.log文件來查看具體的日誌。
其中dotnet 命令輸出的日誌文件分別為位於
/var/log/HelloWebApp.err.log
/var/log/HelloWebApp.out.log
常用命令
sudo service supervisor stop 停止supervisor服務
sudo service supervisor start 啟動supervisor服務
supervisorctl shutdown #關閉所有任務
supervisorctl stop|start program_name #啟動或停止服務
supervisorctl status #查看所有任務狀態
supervisord.conf配置文件說明:
[unix_http_server] file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 會使用 ;chmod=0700 ;socket文件的mode,預設是0700 ;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid ;[inet_http_server] ;HTTP伺服器,提供web管理界面 ;port=127.0.0.1:9001 ;Web管理後臺運行的IP和埠,如果開放到公網,需要註意安全性 ;username=user ;登錄管理後臺的用戶名 ;password=123 ;登錄管理後臺的密碼 [supervisord] logfile=/tmp/supervisord.log ;日誌文件,預設是 $CWD/supervisord.log logfile_maxbytes=50MB ;日誌文件大小,超出會rotate,預設 50MB,如果設成0,表示不限制大小 logfile_backups=10 ;日誌文件保留備份數量預設10,設為0表示不備份 loglevel=info ;日誌級別,預設info,其它: debug,warn,trace pidfile=/tmp/supervisord.pid ;pid 文件 nodaemon=false ;是否在前臺啟動,預設是false,即以 daemon 的方式啟動 minfds=1024 ;可以打開的文件描述符的最小值,預設 1024 minprocs=200 ;可以打開的進程數的最小值,預設 200 [supervisorctl] serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致 ;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接supervisord ; [program:xx]是被管理的進程配置參數,xx是進程的名稱 [program:xx] command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程式啟動命令 autostart=true ; 在supervisord啟動的時候也自動啟動 startsecs=10 ; 啟動10秒後沒有異常退出,就表示進程正常啟動了,預設為1秒 autorestart=true ; 程式退出後自動重啟,可選值:[unexpected,true,false],預設為unexpected,表示進程意外殺死後才重啟 startretries=3 ; 啟動失敗自動重試次數,預設是3 user=tomcat ; 用哪個用戶啟動進程,預設是root priority=999 ; 進程啟動優先順序,預設999,值小的優先啟動 redirect_stderr=true ; 把stderr重定向到stdout,預設false stdout_logfile_maxbytes=20MB ; stdout 日誌文件大小,預設50MB stdout_logfile_backups = 20 ; stdout 日誌文件備份數,預設是10 ; stdout 日誌文件,需要註意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日誌文件) stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out stopasgroup=false ;預設為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程 killasgroup=false ;預設為false,向進程組發送kill信號,包括子進程 ;包含其它配置文件 [include] files = relative/directory/*.ini ;可以指定一個或多個以.ini結束的配置文件
參考文章:
ASP.NET Core Linux下為 dotnet 創建守護進程(必備知識)