CentOS8下安裝Supervisior併爲ASP.NET Core站點配置監控

  之前在Asp.Net Core 3.1 發佈至Linux中已經成功的在CentOS8中運行了Asp.Net Core站點。但是,該站點是手動啓動服務,因此有必要對ASP.NET Core網站應用進行監控,使網站可以持續運行,不然退出Shell後網站就停止了。官方推薦使用Supervisor進行監控。很多文章都已經寫了如何安裝Supervisor和配置Supervisor的文章,但參考之後卻沒那麼順利。因此,將自己的安裝和配置過程記錄下來被查。

主要環境

  1. CentOS Linux release 8.1.1911 (x64)
  2. Python 3.6.8
  3. supervisor-4.1.0

安裝Supervisor

  多數文章裏,安裝Supervisor要麼這樣安裝:

  yum install supervisor

  要麼這樣安裝

yum install python-setuptools
easy_install supervisor

  但是,對於我的環境而言,卻沒有成功。經查,“python版本要求2.4以上, 且不能是python3, supervisor不能運行在任何python3版本上。”幸運的是,在我安裝的時候,supervisor已經支持python3了。但需要使用pip安裝。
1.安裝supervisor

[dotnba@CentOS8 ~]$ sudo pip3 install supervisor
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting supervisor
  Downloading https://files.pythonhosted.org/packages/ca/1f/07713b0e1e34c312450878801d496bce8b9eff5ea9e70d41ff4e299b2df5/supervisor-4.1.0-py2.py3-none-any.whl (318kB)
    100% |████████████████████████████████| 327kB 2.4MB/s 
Installing collected packages: supervisor
Successfully installed supervisor-4.1.0

  supervisor安裝完成後,會在/usr/local/bin下生成三個執行程序:supervisortd、supervisorctl、echo_supervisord_conf,分別是supervisor的守護進程服務(用於接收進程管理命令)、客戶端(用於和守護進程通信,發送管理進程的指令)、生成初始配置文件程序。

[dotnba@CentOS8 ~]$ cd /usr/local/bin
[dotnba@CentOS8 bin]$ dir
echo_supervisord_conf  pidproxy  supervisorctl	supervisord

2.生成配置文件
  在當前用戶的主目錄下生成配置文件:

[dotnba@CentOS8 bin]$ cd /home/dotnba
[dotnba@CentOS8 ~]$ mkdir supervisor
[dotnba@CentOS8 ~]$ cd supervisor
[dotnba@CentOS8 supervisor]$ echo_supervisord_conf > supervisord.conf
[dotnba@CentOS8 supervisor]$ ls
supervisord.conf

3.修改配置文件
  創建自定義配置文件夾:

[dotnba@CentOS8 supervisor]$ pwd
/home/dotnba/supervisor
[dotnba@CentOS8 supervisor]$ mkdir conf.d

  修改配置文件

[dotnba@CentOS8 supervisor]$ vim supervisord.conf

  將配置文件最後修改爲:

[include]
;files = relative/directory/*.ini
;自定義配置文件放置位置
files = conf.d/*.conf

4.啓動supervisor服務

[dotnba@CentOS8 supervisor]$ pwd
/home/dotnba/supervisor
[dotnba@CentOS8 supervisor]$ supervisord -c supervisord.conf

爲Asp.Net Core站點配置守護程序

1. 爲爲Asp.Net Core站點創建配置文件

[dotnba@CentOS8 conf.d]$ pwd
/home/dotnba/supervisor/conf.d
[dotnba@CentOS8 conf.d]$ cat>>WebApiDemo.conf

  文件內容如下:

[program:WebApiDemo]
command=dotnet WebApiDemo.dll ; 運行程序的命令
directory=/home/dotnba/dotnet/ ; 命令執行的目錄
environment=ASPNETCORE_ENVIRONMENT=Production ; 進程環境變量
user=dotnba ; 進程執行的用戶身份
stopsignal=INT
autostart=true
autorestart=true ; 程序意外退出是否自動重啓
startsecs=3 ;/自動重啓間隔
stderr_logfile=/var/log/supervisor/WebApiDemo.err.log ; 錯誤日誌文件
stdout_logfile=/var/log/supervisor/WebApiDemo.out.log ; 輸出日誌文件

2. 重新加載配置文件

[dotnba@CentOS8 conf.d]$ supervisorctl reload

3. 日誌權限問題
  通常,大多數文章到此爲止。但當我們查看supervisor狀態時,卻可能並不正常。

[dotnba@CentOS8 conf.d]$ supervisorctl status
'INFO spawnerr: unknown error making dispatchers for 'WebApiDemo': EACCES'

  解決辦法,首先是要確保supervisor文件夾和WebApiDemo.err.log及WebApiDemo.out.log文件存在,併爲它們授予權限。

[dotnba@CentOS8 conf.d]$ sudo mkdir /var/log/supervisor
[dotnba@CentOS8 conf.d]$ cat>> /var/log/supervisor/WebApiDemo.err.log
[dotnba@CentOS8 conf.d]$ cat>> /var/log/supervisor/WebApiDemo.out.log
[dotnba@CentOS8 conf.d]$ sudo chmod 777 /var/log/supervisor/WebApiDemo.err.log
[dotnba@CentOS8 conf.d]$ sudo chmod 777 /var/log/supervisor/WebApiDemo.out.log 

4. 重啓,查看狀態

[dotnba@CentOS8 supervisor]$ supervisorctl -c supervisord.conf restart all
[dotnba@CentOS8 supervisor]$ supervisorctl status
WebApiDemo                       RUNNING   pid 5254, uptime 0:00:19
[dotnba@CentOS8 supervisor]$  ps -ef | grep WebApiDemo
dotnba     5254   3463  0 17:21 ?        00:00:00 dotnet WebApiDemo.dll
dotnba     5426   3421  0 17:25 pts/0    00:00:00 grep --color=auto WebApiDemo

開機啓動Supervisor服務

1. 創建supervisor.service文件
  進入/lib/systemd/system目錄,並創建supervisor.service文件,該文件內容如下所示。

# 先查看程序的路徑
[dotnba@CentOS8 system]$ whereis supervisord
supervisord: /usr/local/bin/supervisord /usr/local/bin/supervisord.conf
[dotnba@CentOS8 system]$ whereis supervisorctl
supervisorctl: /usr/local/bin/supervisorctl
[dotnba@CentOS8 system]$ cd /lib/systemd/system
[dotnba@CentOS8 system]$sudo vim supervisor.service

  配置文件內容如下:

[Unit]
Description=supervisor
After=network.target
 
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /home/dotnba/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
 
[Install]
WantedBy=multi-user.target

2. 設置開機啓動

[dotnba@CentOS8 system]$ systemctl enable supervisor.service
Created symlink /etc/systemd/system/multi-user.target.wants/supervisor.service → /usr/lib/systemd/system/supervisor.service.
[dotnba@CentOS8 system]$ systemctl daemon-reload
[dotnba@CentOS8 system]$ service supervisor status
Redirecting to /bin/systemctl status supervisor.service
● supervisor.service - supervisor
   Loaded: loaded (/usr/lib/systemd/system/supervisor.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-02-04 18:17:04 CST; 34s ago
  Process: 4469 ExecStart=/usr/local/bin/supervisord -c /home/dotnba/supervisor/supervisord.conf (code=exited, status=0/SUCCESS)
 Main PID: 4472 (supervisord)
    Tasks: 16 (limit: 23832)
   Memory: 75.7M
   CGroup: /system.slice/supervisor.service
           ├─4472 /usr/bin/python3.6 /usr/local/bin/supervisord -c /home/dotnba/supervisor/supervisord.conf
           └─4473 dotnet WebApiDemo.dll

2月 04 18:17:03 CentOS8 systemd[1]: Starting supervisor...
2月 04 18:17:04 CentOS8 systemd[1]: Started supervisor.

3.修改文件權限爲766

[dotnba@CentOS8 system]$ sudo chmod 766 supervisor.service

參考文章:

1.Python3支持的Supervisor安裝與配置,監控進程狀態: https://www.jianshu.com/p/ba6327f198ce
2. supervisor 錯誤集合:https://www.cnblogs.com/52forjie/p/10057999.html
3. Supervisor踩過的坑:https://www.cnblogs.com/drek_blog/p/10998034.html

發佈了16 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章