守护进程,英文名:“daemon",也有守护神的意思。守护进程是一个在后台运行而且不受任何终端控制的进程,不会随着会话结束而退出。诸如 mysql、apache 等这类程序默认就提供了守护进程或者以守护进程的方式工做,咱们熟悉的 “mysqld”、"httpd" 等其中的 d 就是 daemon 的意思。好比咱们在 Linux 系统上以命令 dotnet xxx.dll
运行 .NET Core 应用程序时,若是咱们结束会话,那么咱们的程序将会结束运行。其缘由是 Linux 系统中有一个信号机制,进程能够经过一系列信号进行通讯,当用户结束会话时,会向当前会话的子进程发送一个 HUP 信号,通常状况下当前会话的子进程收到HUP信号之后就会退出本身。 这时咱们就须要一个守护进程来管控咱们的 .NET Core 应用程序进程。html
Linux 下让进程后台方式不少,举栗子:Supervisor、Screen、nohup 命令 等等。Supervisor 是本身建立了一个守护进程,而后让咱们的应用程序进程成为其子进程,经过这种管控方式让咱们的应用程序后台运行。nohup 顾名思义,就是不向会话进程发送hup信号。node
在这里我就搬出本文的主角 pm2,经过 pm2 来让进程后台运行。mysql
pm2 从名字上和咱们平时在生活中接触到的 pm2.5 有点像,不过他们可不是一个东西。作 nodejs 开发的童鞋可能对 pm2 比较熟悉,pm2 是一个高级nodejs进程管理工具。web
看到这里,可能有童鞋会有疑问,nodejs进程管理工具怎么管理 .NET Core 进程?博主通过长期的在 Linux 下的摸爬滚打,最终发现使用pm2来守护 .NET Core 进程彻底没有问题,除了 nodejs 其余的不少程序都是能够的。并且无需繁琐的配置,安装、使用、管理进程都很是简单,这是我选择它的主要缘由。sql
这里须要说明一下是使用 pm2 来让进程后台运行,由于若是不是 nodejs 程序, pm2的一些为nodejs准备的功能多是没法使用的,可是对于咱们守护 .NET Core 应用程序足够了。shell
使用pm2须要安装nodejs,这个网上不少资料,就再也不本文详细说明了,我前面写过一篇在 Centos 7下安装的文章,传送门。apache
npm install pm2 -g
就一句话,是否是很简单。安装成功之后使用命令 pm2
来检查是否安装成功,你会看到以下输出:npm
------------- __/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ 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
命令 | 说明 |
---|---|
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/#usageapi
# 建立项目 dotnet new webapi --no-https -o testwebapi # 发布项目 cd testwebapi/ dotnet publish -c Release cd bin/Release/netcoreapp2.1/publish # 运行项目 dotnet testwebapi.dll
运行成功会有以下输出:app
结束咱们刚刚运行的程序,就在咱们刚刚的目录执行下面的命令:
pm2 start "dotnet testwebapi.dll" --name testwebapi
执行成功:
咱们能够清晰的看到咱们的应用程序的 pid、运行状态、重启次数(应用程序崩溃重启/手动重启)、运行时间、cpu和内存占用等。十分方便
使用 curl 访问 api 检查是否运行成功:
curl http://localhost:5000/api/values
pm2 logs testwebapi
pm2 info testwebapi
pm2 monit testwebapi
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