守護進程(Daemon)是一種運行在後臺的特殊進程,它獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。由於在linux中,每個系統與用戶進行交流的界面稱爲終端,每一個從此終端開始運行的進程都會依附於這個終端,這個終端被稱爲這些進程的控制終端,當控制終端被關閉的時候,相應的進程都會自動關閉。但是守護進程卻能突破這種限制,它脫離於終端並且在後臺運行,並且它脫離終端的目的是爲了避免進程在運行的過程中的信息在任何終端中顯示並且進程也不會被任何終端所產生的終端信息所打斷。它從被執行的時候開始運轉,直到整個系統關閉才退出。
supersior只能管理跑在前臺的程序,這一點非常重要。
1 安裝
yum install python-setuptools
easy_install supervisor
2 配置
2.1 創建文件夾和配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
2.2 修改/etc/supervisor/supervisord.conf文件內容
在文件結尾[include]節點處
把;files = relative/directory/*.ini改爲files = conf.d/*.conf
保存並退出
2.3 執行supervisorctl reload命令使配置文件生效
2.4 在/etc/supervisor/下創建conf.d文件夾,及ProjectName.conf(以項目名稱命名的)
2.5 打開ProjectName.conf文件,添加內容如下:
[program: ProjectName]
command=dotnet ProjectName.dll ; 運行程序的命令
directory=/root/Publishing/PublishOutput/ ; 命令執行的目錄
autorestart=true ; 程序意外退出是否自動重啓
autostart=true ; 是否自動啓動
stderr_logfile=/var/log/ProjectName.err.log ; 錯誤日誌文件
stdout_logfile=/var/log/ProjectName.out.log ; 輸出日誌文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進程環境變量
user=root ; 進程執行的用戶身份
stopsignal=INT
startsecs=1 ; 自動重啓間隔
保存並退出
3 運行
supervisord -c /etc/supervisor/ supervisord.conf
ps -ef | grep ProjectName
4 常用命令
supervisorctl shutdown #關閉所有任務
supervisorctl stop|start program_name #啓動或停止服務
supervisorctl status #查看所有任務狀態
5 配置supervisord開機啓動
5.1 在指定目錄下創建文件supervisord.service
vim /usr/lib/systemd/system/supervisord.service
5.2 輸入以下內容:
[Unit]
Description=Supervisor daemon
[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
5.3 保存並退出
執行以下命令
驗證是否爲開機啓動:
systemctl is-enabled supervisord