supervisor:一種進程管理利器,讓程序後臺運行
類似於windows service一樣的服務,能實現監控程序狀態,異常退出是能自動啓動
1.安裝supervisor
yum install python-setuptools
easy_install supervisor //安裝依賴
2.配置supervisor
創建目錄
mkdir /etc/supervisor
通過echo_supervisor_conf 程序(用來生成初始配置文件,文件名可自定義)來初始化一個配置文件
//自動生成一個默認的配置文件
echo_supervisor_conf > /etc/supervisor/supervisord.conf
通過vi 修改配置信息
vi /etc/supervisor/supervisord.conf
修改爲:
[include]
files = /etc/supervisor/conf.d/*.ini ;創建一個supervisor 進程配置文件加載目錄(定位服務腳本的位置)讓supervisor自動加載改目錄下後綴爲.ini的文件作爲進程配置服務
3.爲部署項目添加進程配置文件
在/etc/supervisor/conf.d/ 創建文件main.ini
vi main.ini
[program:main] ##自定義進程名稱
command=python xxxx ## 程序啓動命令
#directory=/data/webroot/xxxx ## 命令執行的目錄 程序存放字服務器上的目錄
autostart=true ## 在supervisor啓動是 程序是否啓動
autorestart=true ## 程序退出後自動重啓
#startretries=5 ## 啓動失敗自動重試次數 默認爲3
startsecs=2 ## 自動重啓間隔
#user=root ## 設置啓動進程的用戶 默認 root
#stderr_logfile=/var/log/xxx.err.log ## 標準錯誤日誌
#stdout_logfile=/var/log/xxx.out.log ## 標準輸出日誌
#environment= ## 進程環境變量
#stopsignal=INT ## 請求停止是用來殺死程序的信號
4.啓動服務
supervisord -c /etc/supervisor/supervisord.conf
若出現報錯:
[root@yuan system]# supervisord -c /etc/supervisor/supervisord.conf
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
錯誤原因是supervisor.sock這個文件會被系統自動刪除或者其他原因不存在了,刪除軟連接就可以
解決:
find / -name supervisor.sock
unlink /tmp/supervisor.sock
或者
有可能因爲一個使用supervisor配置的應用程序正在運行需執行 supervisorctl shutdown 命令終止
supervisorctl //打開命令行
ctl中: help //查看命令
ctl中: status //查看狀態
另外如果修改了 /etc/supervisor/supervisord.conf ,需要執行 supervisorctl reload 來重新加載配置文件,否則不會生效
5.配置開機自啓動
生成supervisord.service文件,保存在/usr/lib/systemd/system/
vi supervisord.service
[Unit]
Description=Supervisor daemon
[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 supervisord
systemctl is-enabled supervisord
systemctl daemon-reload #重新加載某個服務的配置文件,如果新安裝了一個服務,歸屬於 systemctl 管理,要是新服務的服務程序配置文件生效,需重新加載。
systemctl restart supervisord #重啓,出錯可能原因supervisor.sock,解決參考上方錯誤
視頻鏈接地址:https://edu.csdn.net/course/play/25611/307228
詳細配置參考地址:supervisor模塊學習使用