如何使用pm2守护你的.NET Core应用程序详解
 更新时间:2018年10月13日 08:38:53   作者:李志强  

pm2是nodejs的一个带有负载均衡功能的应用进程管理器的模块,下面这篇文章主要给大家介绍了关于如何使用pm2守护你的.NET Core应用程序的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

一.守护进程的前世今生
守护进程,英文名:“daemon”,也有守护神的意思。守护进程是一个在后台运行并且不受任何终端控制的进程,不会随着会话结束而退出。诸如 mysql、apache 等这类程序默认就提供了守护进程或者以守护进程的方式工作,我们熟悉的 “mysqld”、”httpd” 等其中的 d 就是 daemon 的意思。比如我们在 Linux 系统上以命令 dotnet xxx.dll 运行 .NET Core 应用程序时,如果我们结束会话,那么我们的程序将会结束运行。其原因是 Linux 系统中有一个信号机制,进程可以通过一系列信号进行通信,当用户结束会话时,会向当前会话的子进程发送一个 HUP 信号,一般情况下当前会话的子进程收到HUP信号以后就会退出自己。 这时我们就需要一个守护进程来管控我们的 .NET Core 应用程序进程。
二.让进程后台运行
Linux 下让进程后台方式很多,举栗子:Supervisor、Screen、nohup 命令 等等。Supervisor 是自己创建了一个守护进程,然后让我们的应用程序进程成为其子进程,通过这种管控方式让我们的应用程序后台运行。nohup 顾名思义,就是不向会话进程发送hup信号。
在这里我就搬出本文的主角 pm2,通过 pm2 来让进程后台运行。
三. pm2介绍
pm2 从名字上和我们平时在生活中接触到的 pm2.5 有点像,不过他们可不是一个东西。做 nodejs 开发的童鞋可能对 pm2 比较熟悉,pm2 是一个高级nodejs进程管理工具。

看到这里,可能有童鞋会有疑问,nodejs进程管理工具怎么管理 .NET Core 进程?博主经过长期的在 Linux 下的摸爬滚打,最终发现使用pm2来守护 .NET Core 进程完全没有问题,除了 nodejs 其他的很多程序都是可以的。而且无需繁琐的配置,安装、使用、管理进程都非常简单,这是我选择它的主要原因。
这里需要说明一下是使用 pm2 来让进程后台运行,因为如果不是 nodejs 程序, pm2的一些为nodejs准备的功能可能是无法使用的,但是对于我们守护 .NET Core 应用程序足够了。
四.pm2的安装以及使用
4.1 安装
4.1.1 安装 nodejs
使用pm2需要安装nodejs,这个网上很多资料,就不再本文详细说明了,我前面写过一篇在 Centos 7下安装的文章,传送门。
4.1.2 安装 pm2

npm install pm2 -g

就一句话,是不是很简单。安装成功以后使用命令 pm2来检查是否安装成功,你会看到如下输出:

————-
__/\\\\\\\\\\\\\\\\\\\\\\\\\\____/\\\\\\\\____________/\\\\\\\\____/\\\\\\\\\\\\\\\\\\_____
_\\/\\\\\\/////////\\\\\\_\\/\\\\\\\\\\\\________/\\\\\\\\\\\\__/\\\\\\///////\\\\\\___
_\\/\\\\\\_______\\/\\\\\\_\\/\\\\\\//\\\\\\____/\\\\\\//\\\\\\_\\///______\\//\\\\\\__
_\\/\\\\\\\\\\\\\\\\\\\\\\\\\\/__\\/\\\\\\\\///\\\\\\/\\\\\\/_\\/\\\\\\___________/\\\\\\/___
_\\/\\\\\\/////////____\\/\\\\\\__\\///\\\\\\/___\\/\\\\\\________/\\\\\\//_____
_\\/\\\\\\_____________\\/\\\\\\____\\///_____\\/\\\\\\_____/\\\\\\//________
_\\/\\\\\\_____________\\/\\\\\\_____________\\/\\\\\\___/\\\\\\/___________
_\\/\\\\\\_____________\\/\\\\\\_____________\\/\\\\\\__/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\_
_\\///______________\\///______________\\///__\\///////////////__

Runtime Edition
PM2 is a Production Process Manager for Node.js applications
with a built-in Load Balancer.
Start and Daemonize any application:
$ pm2 start app.js
Load Balance 4 instances of api.js:
$ pm2 start api.js -i 4
Monitor in production:
$ pm2 monitor
Make pm2 auto-boot at server restart:
$ pm2 startup
To go further checkout:
pm2.io/

————-
usage: pm2 [options] <command>
pm2 -h, –help all available commands and options
pm2 examples display pm2 usage examples
pm2 <command> -h help on a specific command
Access pm2 files in ~/.pm2

4.2 使用
4.2.1 常用命令

命令
说明

pm2 startup
设置pm2开机自启动

pm2 unstartup
移除pm2开机自启动

pm2 save
保存当前进程开机自启动

pm2 start <进程启动命令> [–name <进程名>]
启动应用程序

pm2 list
显示所有进程状态

pm2 monit
监控进程

pm2 logs [进程id或名字]
显示进程日志

pm2 stop [all]
停止[所有]进程

pm2 restart [all]
重启[所有]进程

pm2 delete [<进程名或者id>,all]
删除指定[所有]进程

pm2 info [进程id或名字]
查看应用程序信息

官方文档:pm2.keymetrics.io/docs/usage/quick-start/
五. 使用 pm2 守护 ASP.NET Core 应用程序
5.1 创建一个 webapi 项目

# 创建项目
dotnet new webapi –no-https -o testwebapi
# 发布项目
cd testwebapi/
dotnet publish -c Release
cd bin/Release/netcoreapp2.1/publish
# 运行项目
dotnet testwebapi.dll

运行成功会有如下输出:

5.2 使用pm2守护
5.2.1 启动
结束我们刚刚运行的程序,就在我们刚刚的目录执行下面的命令:

pm2 start “dotnet testwebapi.dll” –name testwebapi

执行成功:

我们可以清晰的看到我们的应用程序的 pid、运行状态、重启次数(应用程序崩溃重启/手动重启)、运行时间、cpu和内存占用等。十分方便
使用 curl 访问 api 检查是否运行成功:

curl localhost:5000/api/values

5.2.2 查看日志

pm2 logs testwebapi

5.2.3 查看应用程序信息

pm2 info testwebapi

5.2.4 监控应用程序

pm2 monit testwebapi

5.2.3 重启策略
pm2 会在你的应用程序异常退出时,自动帮你重启,所谓异常退出,指退出代码非0。
测试:
修改 ValueController 添加退出代码为1的代码:

发布,并使用 pm2 启动(此处略)。
通过 pm2 list查询应用程序重启次数为0:

访问 api 触发异常退出:

curl localhost:5000/api/values

再次通过 pm2 list命令查询可以发现重启了:

六.结束
pm2 这个工具相对于 Supervisor 和 nohup 来说,对于Supervisor,没有配置,不用输很长的命令;对于 nohup 管理进程方便。欢迎大家与我交流。
pm2官方文档
CentOS 7 源码编译安装 NodeJS by 晓晨Master
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。

pm2
守护
应用程序

相关文章
System.Web.Routing入门及进阶System.Web.Routing已经作为一个程序集包含在.net3.5sp1中发布了。虽然我们并没有在3.5sp1中发现Asp.net Mvc的踪迹,但是亦以感觉到它离我们不远了 2011-12-12
.NET Core3.0创建Worker Services的实现这篇文章主要介绍了.NET Core3.0创建Worker Services的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-10-10
asp.net中利用ashx实现图片防盗链的原理分析盗链的危害我就不说了,网上有很多。下面是asp.net下利用ashx的防盗链原理分析 2008-09-09
ASP.NET使用xslt将xml转换成Excel本文介绍利用Excel软件生成格式,提取和精简之后制作成xslt文件,将xml导入,以xslt为模板,生成新的Excel文件的过程。 2016-05-05
asp.net页面中时间格式化的示例这篇文章主要介绍了asp.net页面中时间格式化的示例,需要的朋友可以参考下 2014-04-04
.net socket客户端实例代码分享这篇文章主要介绍了.net写的socket客户端,下面有使用方法,大家参考使用吧 2013-12-12
MVC+EasyUI+三层架构简单权限管理系统这篇文章主要为大家详细介绍了MVC+EasyUI+三层架构简单权限管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-07-07
AspNetPager分页控件源代码(Version 4.2)AspNetPager分页控件源代码(Version 4.2)… 2007-04-04
ASP.NET 文件压缩解压类(C#)这篇文章主要为大家详细介绍了ASP.NET 文件压缩解压类,感兴趣的小伙伴们可以参考一下 2016-07-07
ASP.NET性能优化之局部缓存分析如果我们在开发网站过程中的缓存策略是不支持页面局部缓存的,整个架构就是不合理的 2011-10-10

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。