首先簡單瞭解下Supervisor, Supervisor(http://supervisord.org/)是用Python開發的一個client/server服務,是Linux/Unix系統下的一個進程管理工具,不支持Windows系統。它能夠很方便的監聽、啓動、中止、重啓一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監聽到進程死後,會自動將它從新拉起,很方便的作到進程自動恢復的功能,再也不須要本身寫shell腳原本控制。python
執行下面的命令,安裝python。shell
yum install python-setuptools easy_install supervisor
在/etc/目錄下,建立supervisor文件夾。bash
mkdir /etc/supervisor
在該目錄下,生成supervisord.conf文件工具
echo_supervisord_conf > /etc/supervisor/supervisord.conf
修改/etc/supervisor/supervisord.conf文件內容,在文件中找到[include],把;去掉,把files = ./conf.d/*.conf.net
[include] files=./conf.d/*.conf
而後,在conf.d目錄中,建立一個名爲helloworld.conf的文件,配置以下:命令行
[program: ProjectName] command=dotnet helloworld.dll ; 運行程序的命令 directory=/wwwroot/demo/ ; 命令執行的目錄 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 ; 自動重啓間隔
上面是以.net core程序爲例,建立一個守護進程的配置。rest
接下來,指定supervisor配置文件:日誌
supervisord -c /etc/supervisor/supervisord.conf
配置supervisor開機啓動code
sudo systemctl start supervisord.service sudo systemctl enable supervisord.service
若是出現unit未找到,則能夠手動建立一個service文件,進入/lib/systemd/system目錄,並建立supervisor.service文件server
[Unit] Description=supervisor After=network.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown ExecReload=/usr/bin/supervisorctl $OPTIONS reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
systemctl enable supervisor.service systemctl daemon-reload
supervisorctl 操做
supervisorctl 是 supervisord 的命令行客戶端工具,使用的配置和 supervisord 同樣,這裏就再也不說了。下面,主要介紹 supervisorctl 操做的經常使用命令:
輸入命令 supervisorctl 進入 supervisorctl 的 shell 交互界面(仍是純命令行),就能夠在下面輸入命令了。:
help # 查看幫助
status # 查看程序狀態
stop program_name # 關閉 指定的程序
start program_name # 啓動 指定的程序
restart program_name # 重啓 指定的程序
tail -f program_name # 查看 該程序的日誌
update # 重啓配置文件修改過的程序(修改了配置,經過這個命令加載新的配置)
也能夠直接經過 shell 命令操做: