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

发布了17 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ldy/article/details/104169022