.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. ...
随机推荐
- javaee作业
一.单选题(共5题,50.0分) 1 在SqlSession对象的openSession()方法中,不能作为参数executorType的可选值 的是( ). A. ExecutorTyp ...
- C语言程序设计(十一) 指针和数组
第十一章 指针和数组 一旦给出数组的定义,编译系统就会为其在内存中分配固定的存储单元,相应的,数组的首地址也就确定了 C语言中的数组名有特殊的含义,它代表存放数组元素的连续存储空间的首地址 //L11 ...
- vquery 一些应用
// JavaScript Document function myAddEvent(obj,sEv,fn){ if(obj.attachEvent){ obj.attachEvent('on'+sE ...
- go源码分析(四) net包获取主机ip 子网掩码相关分析
获取本地的ip时 顺便学习了下标准库net中的实现 在net/interface.go中进行了入口调用,返回值为Addr的slice func InterfaceAddrs() ([]Addr, er ...
- 【转】分布式架构的演进(JavaWeb)
作者:李小翀 链接:https://www.zhihu.com/question/22764869/answer/31277656 来源:知乎 1.初始 初始阶段 的小型系统 应用程序.数据库.文件等 ...
- 【opencv系列02】OpenCV4.X图像读取与显示
一.读取图片 opencv中采用imread() 函数读取图像 imread(filename, flags=None) filename 图片的路径 flags 图像读取方式 ● c ...
- JAVA 转换 树结构数据
JAVA 转换 树结构数据 第一步:引入fastjson <dependency> <groupId>com.alibaba</groupId> <artif ...
- 再刷JVM-JVM运行时数据区域
前言 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域有各自的用途,以及创建和销毁的时机,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程 ...
- Webpack中SplitChunksPlugin 配置参数详解
代码分割本身和 webpack 没有什么关系,但是由于使用 webpack 可以非常轻松地实现代码分割,所以提到代码分割首先就会想到使用 webopack 实现. 在 webpack 中是使用 Spl ...
- 使用new Image()可以针对单单请求,不要返回数据的情况
使用new Image()可以针对单单请求,不要返回数据的情况,比如我这里写了一个Demo,请求百度的Logo一个示例: <html> <head> </head> ...