使用 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:
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
运行成功会有如下输出:
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
命令查询可以发现重启了:
六.结束
pm2 这个工具相对于 Supervisor 和 nohup 来说,对于Supervisor,没有配置,不用输很长的命令;对于 nohup 管理进程方便。欢迎大家与我交流。
CentOS 7 源码编译安装 NodeJS by 晓晨Master
使用 pm2 守护你的 .NET Core 应用程序的更多相关文章
- Jenkins 远程启动nodejs失败,使用pm2守护Nodejs
一.概述 使用Jenkins 远程ssh到linux,使用命令: ssh root@192.168.10.1 'cd /data/test;nohup npm start &' 发现linux ...
- ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程
一.前言 在上一篇文章中,我们讲解了如何在Linux服务器上面部署ASP.NET Core应用程序,并且使用Nginx作为反向代理.我们在Linux服务器上面,是通过ASP.NET Core自宿主的方 ...
- 使用PM2守护Node.js应用
PM2简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装PM2 $ npm install pm2 -g ...
- (转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)
原文链接: http://www.cnblogs.com/ants/p/5732337.html 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Cor ...
- 将ASP.NET Core应用程序部署至生产环境中(CentOS7)
这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方 ...
- 将ASP.NET Core应用程序部署至生产环境中(CentOS7)(转)
阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守 ...
- 生产环境中CentOS7部署NET Core应用程序
NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. ...
- CentOS 7部署ASP.NET Core应用程序
看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...
- 使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序
本文于2019年04月10日将标题「CentOS7 部署 ASP.NET Core应用程序」修改为「使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序」. 环境准备 VMwa ...
随机推荐
- 命令提示符编译java
先新建一个文件夹kun,kun就是类所在的package.新建一个java文件. HelloWorld.java的代码如下: package kun; public class HelloWorld{ ...
- Jmeter----【Mac电脑】环境配置与打开Jmeter界面
前提条件:打开Jmeter界面,首先需要安装java并配置环境变量. 第一步:下载并安装jdk和环境配置 java jdk下载:http://www.oracle.com/technetwork/ja ...
- 【机器学习基础】对 softmax 和 cross-entropy 求导
目录 符号定义 对 softmax 求导 对 cross-entropy 求导 对 softmax 和 cross-entropy 一起求导 References 在论文中看到对 softmax 和 ...
- 从壹开始前后端分离[.NetCore ] 38 ║自动初始化数据库(不定期更新)
缘起 哈喽大家好呀,我们又见面啦,这里先祝大家圣诞节快乐哟,昨天的红包不知道有没有小伙伴抢到呢.今天的这篇内容灰常简单,只是对我们的系统的数据库进行CodeFirst,然后就是数据处理,因为这几个月来 ...
- Boosting(提升方法)之AdaBoost
集成学习(ensemble learning)通过构建并结合多个个体学习器来完成学习任务,也被称为基于委员会的学习. 集成学习构建多个个体学习器时分两种情况:一种情况是所有的个体学习器都是同一种类型的 ...
- [JavaScript] AMD和CMD概述
1. cmd 和 amd 在浏览器中,受网络和浏览器渲染的制约,不能采用同步加载,只能采用异步加载.于是 AMD 规范应运而生 2. AMD AMD(Asynchronous Module Defin ...
- SpringBoot整合SpringCloud搭建分布式应用
什么是SpringCloud? SpringCloud是一个分布式的整体解决方案.SpringCloud为开发者提供了在分布式系统中快速构建的工具,使用SpringCloud可以快速的启动服务或构建应 ...
- Python中使用type、metaclass动态创建方法和属性
1: type() 我们知道动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Person的class: class Person(obj ...
- 24, CSS 构造超链接
1. 超链接边框 2. 派生超链接 3. 属性选择器超链接 4. 动态超链接 5. 图像翻转超链接 6. CSS 工具提示 1.给链接加上边框 A:link { Color: #f00; Text-d ...
- 首发福利!全球第一开源ERP Odoo系统架构部署指南 电子书分享
引言 Odoo,以前叫OpenERP,是比利时Odoo S.A.公司开发的一个企业应用软件套件,开源套件包括一个企业应用快速开发平台,以及几千个Odoo及第三方开发的企业应用模块.Odoo适用于各种规 ...