首页 > 编程语言 >使用 pm2 守护你的 .NET Core 应用程序

使用 pm2 守护你的 .NET Core 应用程序

时间:2023-01-09 14:34:02浏览次数:102  
标签:Core pm2 应用程序 进程 NET 守护

一.守护进程的前世今生#

守护进程,英文名:“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进程管理工具。

img

看到这里,可能有童鞋会有疑问,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/#usage

五. 使用 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

运行成功会有如下输出:

1539275616184

5.2 使用pm2守护#

5.2.1 启动#

结束我们刚刚运行的程序,就在我们刚刚的目录执行下面的命令:

pm2 start "dotnet testwebapi.dll" --name testwebapi

执行成功:

1539275651121

我们可以清晰的看到我们的应用程序的 pid、运行状态、重启次数(应用程序崩溃重启/手动重启)、运行时间、cpu和内存占用等。十分方便

使用 curl 访问 api 检查是否运行成功:

curl http://localhost:5000/api/values

1539275952810

5.2.2 查看日志#

pm2 logs testwebapi

1539275702867

5.2.3 查看应用程序信息#

pm2 info testwebapi

1539275756689

5.2.4 监控应用程序#

pm2 monit testwebapi

1539275847838

5.2.3 重启策略#

pm2 会在你的应用程序异常退出时,自动帮你重启,所谓异常退出,指退出代码非0。

测试:

修改 ValueController 添加退出代码为1的代码:

1539276422702

发布,并使用 pm2 启动(此处略)。

通过 pm2 list查询应用程序重启次数为0:

1539276519474

访问 api 触发异常退出:

curl http://localhost:5000/api/values

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

1539276596156

六.结束#

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

pm2官方文档

CentOS 7 源码编译安装 NodeJS 

使用 pm2 守护你的 .NET Core 应用程序 - 晓晨Master - 博客园 (cnblogs.com)

标签:Core,pm2,应用程序,进程,NET,守护
From: https://www.cnblogs.com/lidabo/p/17036951.html

相关文章

  • NETCORE + VUE + SignalR 消息通信
     NETCORE+VUE+SignalR消息通信  分组通信:https://blog.csdn.net/qbc12345678/article/details/125215711 一.创建Net6WebApi项目NETCORE.TSignalR1.......
  • [ensp自学]9.NET地址转换
    1.静态NET,一对一的地址转换。必须在路由的出口outbound端口设置。(很少使用)intg0/0/1natstaticglobal172.16.1.1inside192.168.1.12.动态NET,创建一个地址池,用ACL判断,使......
  • MAML —— Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
    论文地址:https://arxiv.org/abs/1703.03400  代码:有监督学习:https://github.com/cbfinn/maml强化学习:https://github.com/cbfinn/maml_rl   ============......
  • Linux学习记录(五)DHCP服务器配置(Net模式)
    一、DHCP协议DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情......
  • vs code .net core Linux下离线安装Nuget包
    本人第一次使用vscode在linux下开发.netcore项目,由于处于内网,无法通过在线安装,所以在遇见离线安装Nuget包时,耗费了一番功夫,网上也没有相关的,最后还是多个思路结合才......
  • AttributeError: 'NoneType' object has no attribute 'append'
    在写python脚本时遇到AttributeError:'NoneType'objecthasnoattribute'append'a=[]b=[1,2,3,4]a=a.append(b)执行一次后发现a的类型变为了NoneType。下次执......
  • 关于NET异步的理解
    1、包含async、await关键字及Task相关方法,async和await必须成对使用(Task无强制要求)。2、异步是为了解决执行耗时操作所导致的线程阻塞。3、当在你的method中调用NET提供......
  • 一个专注推荐.Net开源项目的榜单
    大家好,我是编程乐趣,从7月份开始推荐开源项目,已经推荐了接近100个开源项目了,其中绝大部分是有关.Net的开源项目,也受到大家非常多人的喜欢。由于公众号不方便查询,很多人又想......
  • log4net 文件名重叠解决办法
    此为多线程写日志造成解决办法,在appender节点里添加:<paramname="lockingModel"type="log4net.Appender.FileAppender+MinimalLock"/>完整XML示例:<log4net>......
  • Net Core 微服务 - 如何在docker容器里运行一个简单的.net core web api 服务
    原文网址:https://www.cnblogs.com/SF8588/p/15380776.html微服务k8s参考1.新建一个WebApi项目默认的webapi项目包含一个默认的api:/weatherforecast    2.新建......