.NET Core项目部署到Linux(Centos7)(八)为.NET Core项目建立Supervisor进程守护监控

目录

1.前言

2.环境和软件的准备

3.建立.NET Core API项目

4.VMware Workstation虚拟机及Centos 7安装

5.Centos 7安装.NET Core环境

6.发布.NET Core项目到Linux

7.启动和中止.NET Core项目

8.为.NET Core项目建立Supervisor进程守护监控

9.防火墙配置,容许外网或局域网访问.NET Core站点

10.总结

 

1.Supervisor介绍

  在linux或者unix操做系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端而且周期性的执行某种任务或等待处理某些发生的事件。因为在linux中,每一个系统与用户进行交流的界面称为终端,每个今后终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。可是守护进程却能突破这种限制,它脱离于终端而且在后台运行,而且它脱离终端的目的是为了不进程在运行的过程当中的信息在任何终端中显示而且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。html

  此处的建立守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程建立一个守护进程。在 Linux 上有不少能够管理进程的工具,咱们使用 Supervisor 来作这个事情。python

缘由有两点:
①、它是微软官方文档推荐的,下降学习成本。
②、它并不必定是最好的,但必定是文档最全的。
linux

 

2.在Linux上安装Supervisor

 

#执行epel-release
sudo yum -y install epel-release

#安装Supervisor
sudo yum -y install supervisor

#经过配置文件来启动supervisor
sudo supervisord -c /etc/supervisord.conf

#启动supervisorctl
sudo supervisorctl -c /etc/supervisord.conf

#查看supervisor 版本
version

 

这里直接执行安装Supervisor,可能会出现没有可用软件包 supervisor,这个时候须要安装一个叫”epel-release”的软件包,这个软件包会自动配置yum的软件仓库vim

 

 

注意:须要执行supervisorctl,若是出现error: <class 'socket.error'>, [Errno 13] Permission denied: file: /usr/lib64/python2.7/socket.py line: 224的错误,须要先执行下面语句:
sudo supervisord -c /etc/supervisord.conf
sudo supervisorctl -c /etc/supervisord.conf
而后在去执行须要的操做,以下图:asp.net

 

 

3.建立.NET Core项目的Supervisor配置文件

 

#进入supervisord.d目录
cd /etc/supervisord.d

#新建NetCore进程配置文件
sudo touch DemoNetCore.ini

#查看和编辑DemoNetCore.ini配置文件
sudo vim DemoNetCore.ini

#进入文件后,按“i”或者“a”进入插入模式,插入下面的配置信息

 

#配置程序名称
[program:DemoNetCore]
#运行程序的命令
command=dotnet Demo.Net.Core.dll --urls="http://*:8081;http://*:8082"
#命令执行的目录
directory=/var/www
#进程环境变量
environment=ASPNETCORE_ENVIRONMENT=Production
#进程执行的用户身份
user=demo
#进程中止信号,能够为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号默认为TERM 。当用设定的信号去干掉进程,退出码会被认为是expected,非必须设置
stopsignal=INT
#若是是true的话,子进程将在supervisord启动后被自动启动,默认就是true,非必须设置
autostart=true
#这个是设置子进程挂掉后自动重启的状况,有三个选项,false,unexpected和true。若是为false的时候,不管什么状况下,都不会被从新启动,若是为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启
autorestart=true
#这个选项是子进程启动多少秒以后,此时状态若是是running,则咱们认为启动成功了,默认值为1 。非必须设置
startsecs=1
#错误日志文件
stderr_logfile=/var/log/DemoNetCore.err.log
#输出日志文件
stdout_logfile=/var/log/DemoNetCore.out.log

 

#按ESC,输入命令保存配置文件
:wq   (保存编辑操做退出)
:wq!  (保存编辑强制退出)
:w ! sudo tee %

 

注意:若是以前进入编辑文件没有在root或者sudo下,使用wq,将会提示只读,使用强制执行,使用wq!,将会提示E212:没法打开或写入文件,这个时候须要用到w ! sudo tee %这个命令,而后在q退出编辑python2.7

从新加载Supervisor配置,查看Supervisor运行的进程curl

 

#经过配置文件来启动supervisor
sudo supervisord -c /etc/supervisord.conf

#启动supervisorctl
sudo supervisorctl -c /etc/supervisord.conf

#从新加载配置文件
reload

#查看运行的状态
status

 

 

下面咱们来测试下站点是否运行正常socket

 

#查看相关进行
ps -aux | grep "Demo.Net.Core.dll"

#访问启动的站点
curl http://localhost:8081/weatherforecast

 

以下图,Supervisor已经开启了Dotnet的进程,访问接口地址,返回数据成功工具

 

 

注意:这里有个问题就是,当Linux系统关机后,Supervisor可能不会本身开启,致使须要手动执行sudo supervisord -c /etc/supervisord.conf 命令以后,Dotnet进程才会自动启动,这样与咱们须要达到的效果相差甚远,解决方法看下面第三步。学习

 

4.配置Supervisor开机自启动

 

#进入system目录
cd /usr/lib/systemd/system

#编辑supervisord.service文件
sudo vim supervisord.service

 

supervisord.service文件内容以下

 

[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42

[Install]
WantedBy=multi-user.target

 

编辑好后保存退出,而后执行命令,查看是否启动成功

 

#启动服务
systemctl enable supervisord

#验证一下是否为开机启动
systemctl is-enabled supervisord

 

 

5.验证进程守护监控效果

 

直接干掉Dotnet进程,看看会不会自动启动

 

#查看dotnet进程
ps -aux|grep dotnet

#强制杀死dotnet进程
kill -9 %PID

#再次查看dotnet进程
ps -aux|grep dotnet

 

 

重启Linux,而后直接访问站点

 

 

6.Supervisor经常使用命令

 

# 启动全部
supervisorctl start all

# 重启全部
supervisorctl restart all

# 中止全部
supervisorctl stop all

#PS:要操做某个服务,把all换成服务名便可

#查看服务状态
supervisorctl status