如何使用pm2守护你的.NET Core应用程序详解

 更新时间£º2018年10月13日 08:38:53   作者£º李志强   我要评论

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

一.守护进程的前世今生

守护进程£¬英文名£º¡°daemon"£¬也有守护神的意思¡£守护进程是一个在后台运行并?#20063;?#21463;任何终端控制的进程£¬不会随着会话结束而退出¡£诸如 mysql¡¢apache 等这类程序默认就提供了守护进程或者以守护进程的方式工作£¬我们熟悉的 ¡°mysqld¡±¡¢"httpd" 等其中的 d 就是 daemon 的意思¡£比如我们在 Linux 系统上以命令 dotnet xxx.dll 运行 .NET Core 应用程序时£¬如果我们结束会话£¬那么我们的程序将会结束运行¡£其原因是 Linux 系统中有一个信号机制£¬进程可以通过一系列信号进行通信£¬当用户结束会话时£¬会向当前会话的子进程发送一个 HUP 信号£¬一般情况下当前会话的子进程收到HUP信号以后就会退出自己¡£ 这时我们就需要一个守护进程来管控我们的 .NET Core 应用程序进程¡£

二.让进程后台运行

Linux 下让进程后台方式很多£¬举栗子£ºSupervisor¡¢Screen¡¢nohup 命令 等等¡£Supervisor 是自己创建了一个守护进程£¬然后让我们的应用程序进程成为其子进程£¬通过这种管控方式让我们的应用程序后台运行¡£nohup 顾名?#23478;å£?#23601;是不向会话进程发送hup信号¡£

在这里我就搬出本文的主角 pm2£¬通过 pm2 来让进程后台运行¡£

三. pm2介绍

pm2 ?#29992;?#23383;上和我们平时在生活中接触到的 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:
http://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或名字] 查看应用程序信息

官方文档£ºhttp://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 http://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 http://localhost:5000/api/values

再次通过 pm2 list命令查询可以发?#31181;?#21551;了£º

六.结束

pm2 这个工具相对于 Supervisor 和 nohup 来说£¬对于Supervisor£¬没有配置£¬不用输很长的命令£»对于 nohup 管理进程方便¡£欢迎大家与我交流¡£

pm2官方文档

CentOS 7 源码编译安装 NodeJS by 晓晨Master

好了£¬以上就是这篇文章的全部内容了£¬希望本文的内容对大家的学习或者工作具有一定的参考学习价值£¬如果有疑问大家可以留言交流£¬谢谢大家对脚本之家的支持¡£

  • 利用MS AJAX注册Javascript命名空间并创建类

    利用MS AJAX注册Javascript命名空间并创建类

    利用MS AJAX注册Javascript命名空间并创建类...
    2007-10-10
  • C# 文件保存到数据库中或者从数据库中读取文件

    C# 文件保存到数据库中或者从数据库中读取文件

    在编程中我们常常会遇到¡°将文件保存到数据库中¡±这样一个问题£¬虽然这已不是什么高难度的问题£¬但对于一些刚刚开始编程的朋友来说可能是有一点困?#36873;?/div> 2009-03-03
  • Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现

    Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现

    这篇文章主要给大家介绍了关于Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的相关资料£¬文中通过示例代码及图文介绍的非常详细£¬对大家的学习或者工作具有一定的参考学习价值£¬需要的朋友可以参考下
    2018-05-05
  • Json数据转换list对象实现思路及代码

    Json数据转换list对象实现思路及代码

    本文为大家详细介绍下Json数据转换list对象的具体实现£¬?#34892;?#36259;的朋友可以参考下哈£¬希望对你有所帮助
    2013-04-04
  • Asp.net core利用IIS在windows上进行托管步骤详解

    Asp.net core利用IIS在windows上进行托管步骤详解

    这篇文章主要给大家介绍了关于Asp.net core利用IIS在windows上进行托管步骤的相关资料£¬文中通过示例代码介绍的非常详细£¬对大家的学习或者工作具有一定的参考学习价值£¬需要的朋友们下面随着小编来一起学习学习吧¡£
    2018-03-03
  • 获取远程网页的内容之二£¨downmoon原创£©

    获取远程网页的内容之二£¨downmoon原创£©

    获取远程网页的内容之二£¨downmoon原创£©...
    2007-03-03
  • Asp.Net Core中服务的生命周期选项区别与用法详解

    Asp.Net Core中服务的生命周期选项区别与用法详解

    这篇文章主要给大家介绍了关于Asp.Net Core中服务的生命周期选项区别与用法的相关资料£¬文中通过示例代码介绍的非常详细£¬对大家的学习或者工作具有一定的参考学习价值£¬需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 比较完整的 asp.net 学习流程

    比较完整的 asp.net 学习流程

    好多朋友想学习后台编程语言£¬但请注意的事£¬学习后台是个循序渐进的过程£¬不可能一下就到位£¬其实不只是asp.net其它的编程语言都需要下面的一些知识¡£
    2009-06-06
  • VB.NET拷贝整个目录下所有子目?#25216;?#25991;件的实例代码

    VB.NET拷贝整个目录下所有子目?#25216;?#25991;件的实例代码

    这篇文章介绍了拷贝整个目录下所有子目?#25216;?#25991;件的代码£¬有需要的朋友可以参?#23478;?#19979;
    2013-07-07
  • 最新评论

    常用在线小工具

    ÁÉÄþ35Ñ¡7¿ª½±½á¹û