Supervisor 是一個用 Python 寫的進程管理工具,能夠很方便的用來啓動、重啓、關閉進程(不單單是 Python 進程)。除了對單個進程的控制,還能夠同時啓動、關閉多個進程,好比很不幸的服務器出問題致使全部應用程序都被殺死,此時能夠用 supervisor 同時啓動全部應用程序而不是一個一個地敲命令啓動。html
Supervisor幫助咱們解決在開發過程當中遇到的如下問題:python
ASP.NET Core應用程序運行在shell之中,若是關閉shell則會發現ASP.NET Core應用被關閉,從而致使應用沒法訪問,這種狀況固然是咱們不想遇到的,並且生產環境對這種狀況是零容忍的。shell
若是ASP.NET Core進程意外終止那麼須要人爲連進shell進行再次啓動,每每這種操做都不夠及時。服務器
若是服務器宕機或須要重啓咱們則仍是須要連入shell進行啓動。tcp
首先安裝Python包管理工具(Supervisor使用Python開發的),而後再安裝supervisor。工具
yum install python-setuptools easy_install supervisor
supervisor安裝完成後會生成三個執行程序:網站
supervisortd :supervisor的守護進程服務(用於接收進程管理命令)rest
supervisorctl :客戶端(用於和守護進程通訊,發送管理進程的指令)日誌
echo_supervisord_conf :生成初始配置文件程序。code
添加supervisor文件夾以及conf.d配置文件夾
mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf mkdir /etc/supervisor/conf.d
修改supervisord.conf文件,在文件尾部:
[include] files=/etc/supervisor/conf.d/*.conf
supervisord -c /etc/supervisor/supervisord.conf
在supervisor的conf.d文件夾下新建一個程序配置文件,hellocore.conf:
#配置程序名稱 [program:hellocore] #運行程序的命令 command=dotnet hellocore.dll #命令執行的目錄 directory=/home/hellocore/ #錯誤日誌文件 stderr_logfile=/var/log/hellocore.err.log #輸出日誌文件 stdout_logfile=/var/log/hellocore.out.log #進程環境變量 environment=ASPNETCORE_ENVIRONMENT=Production #進程執行的用戶身份 user=root #程序是否自啓動 autostart=true #程序意外退出是否自動重啓 autorestart=true #啓動時間間隔(秒) startsecs=5 stopsignal=INT
supervisorctl reload #從新加載配置文件
客戶端相關命令:
supervisorctl status #查看程序配置的狀態 supervisorctl stop programname #中止某一個程序配置 supervisorctl start programname #加載某一個程序配置 supervisorctl restart programname #從新加載某一個程序配置 supervisorctl reload #從新加載配置 supervisorctl update
查看配置程序是否啓動:
ps -ef | grep hellocore #programdllname
以下圖,則Supervisor配置成功:
在 /usr/lib/systemd/system
文件夾下新建supervisor.service
配置文件,內容以下:
[Unit] Description=supervisor [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
將服務設置爲開機啓動:
systemctl enable supervisor.service systemctl start supervisor.service
supervisor開機啓動服務配置成功
打開supervisor的配置文件
vi /etc/supervisor/supervisord.conf
找到配置:
;[inet_http_server] ; inet (TCP) server disabled by default ;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) ;username=user ; (default is no username (open server))ls ;password=123 ; (default is no password (open server))
修改爲:
[inet_http_server] ; inet (TCP) 服務,默認是關閉的 port=*:9001 ;ip:端口,*表明全部IP username=root ;登錄帳號,能夠不設 password=root123 ;登錄帳戶,能夠不設
保存好修改後,重啓supervisor。
supervisorctl reload
防火牆查看9001端口是否開啓
firewall-cmd --list-ports #查看已開放的端口
開啓端口:
firewall-cmd --zone=public --add-port=9001/tcp --permanent firewall-cmd --reload #重啓防火牆
命令含義:
--zone #做用域 --add-port=9001/tcp #添加端口,格式爲:端口/通信協議 --permanent #永久生效,沒有此參數重啓後失效
成功訪問: