.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中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。
此处的创建守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。
原因有两点:
①、它是微软官方文档推荐的,降低学习成本。
②、它并不一定是最好的,但一定是文档最全的。
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的软件仓库

注意:需要执行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
然后在去执行需要的操作,如下图:

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退出编辑
重新加载Supervisor配置,查看Supervisor运行的进程
#通过配置文件来启动supervisor
sudo supervisord -c /etc/supervisord.conf #启动supervisorctl
sudo supervisorctl -c /etc/supervisord.conf #重新加载配置文件
reload #查看运行的状态
status

下面我们来测试下站点是否运行正常
#查看相关进行
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= [Install]
WantedBy=multi-user.target
编辑好后保存退出,然后执行命令,查看是否启动成功
#启动服务
systemctl enable supervisord #验证一下是否为开机启动
systemctl is-enabled supervisord

5.验证进程守护监控效果
直接干掉Dotnet进程,看看会不会自动启动
#查看dotnet进程
ps -aux|grep dotnet #强制杀死dotnet进程
kill - %PID #再次查看dotnet进程
ps -aux|grep dotnet

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

6.Supervisor常用命令
# 启动所有
supervisorctl start all # 重启所有
supervisorctl restart all # 停止所有
supervisorctl stop all #PS:要操作某个服务,把all换成服务名即可 #查看服务状态
supervisorctl status
.NET Core项目部署到Linux(Centos7)(八)为.NET Core项目创建Supervisor进程守护监控的更多相关文章
- .NET Core项目部署到Linux(Centos7)(六)发布.NET Core 项目到Linux
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(一)前言
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(十)总结
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(七)启动和停止.NET Core项目
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(九)防火墙配置,允许外网或局域网访问.NET Core站点
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(二)环境和软件的准备
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(三)创建.NET Core API项目
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(四)VMware Workstation虚拟机Centos 7安装
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(五)Centos 7安装.NET Core环境
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
随机推荐
- 基于 HTML + WebGL 结合 23D 的疫情地图实时大屏 PC 版
前言 2019年12月以来,湖北省武汉市陆续发现了多例肺炎病例,现已证实为一种新型冠状病毒感染引起的急性呼吸道传染病并蔓延全国,肺炎疫情牵动人心,人们每天起来第一件事变成了关注疫情进展,期望这场天灾早 ...
- AspNetCore3.1源码解析_2_Hsts中间件
title: "AspNetCore3.1源码解析_2_Hsts中间件" date: 2020-03-16T12:40:46+08:00 draft: false --- 概述 在 ...
- jupyter 安装问题 building 'zmq.libzmq' extension error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
1.用pip install jupyter 安装到一半就报错 错误提示: building 'zmq.libzmq' extension error: Microsoft Visual C++ 14 ...
- git 查看commit的提交记录
相关命令: git log 查看所有提交记录 git show 查看提交详情 示例: git log: git show: 查看指定commit的详情:git show commitId 查看某次c ...
- 微信公众号 H5页面 支付注意细节
1. 当秘钥(AppSecretApplets) 有问题时注意是不是已经被重置过了,此时要注意获取最新的秘钥: 2. 调试时后端的东西要放在线上https 请求 不然在手机上测试时 会被拦截: ...
- 爬虫前奏——初谈Requests库
什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其 ...
- Silence主题 美观清爽的cnblog第三方主题
为什么推荐? 才开通cnblog,但苦于官方主题都不是很好看,翻找Github的时候发现了这个项目Silence 这是预览地址 官方展示图片 安装中的坑 不显示公共模块.博文目录.博文签名.博文赞赏. ...
- 学习Shader所需的数学基础(坐标系,点和矢量)
数学对于计算机图形学的重要性是不言而喻的.在学习Shader之前,首先就要打好数学基础,好在入门Unity Shader所需的数学知识都是线性代数中很基础的的内容.按部就班的来,第一篇文章记录总结的是 ...
- 【Weiss】【第03章】练习3.9:大整数运算包
[练习3.9] 编写任意精度的整数运算包,要求使用类似多项式运算的方法.计算24000内数字0到9的分布.
- Web_Servlet—— Servlet生命周期
第4章 Servlet生命周期(重要) 4.1 Servlet生命周期概述 1,应用程序中的对象不仅在空间上有层次结构的关系,在时间上也会因为处于程序运行过程中的不同阶段而表现出不同的状态和不同的行为 ...