pm2 服务进程管理

我们使用NodeJS或Express等框架编写服务端程序时,难免出现没做好错误处理或是由于其他原因,导致进程意外终止的情况。pm2是一个NodeJS应用的生产级进程管理工具,它可以帮助我们管理和保持应用程序在线运行。pm2提供了负载均衡、进程守护、日志管理、监控等功能,是NodeJS应用部署到生产环境的必备工具。

安装pm2

pm2一般对于我们本地开发电脑是用不上的,因此通常是在服务器上安装,此时建议全局安装到系统中,以便管理多个进程。

npm i -g pm2

安装完成后,我们可以通过命令检查是否安装成功pm2 --version

使用pm2启动服务

假设这里我们有一个Express编写的HTTP服务,不使用pm2时启动命令可能为node ./index.js。如果使用pm2管理服务,则启动命令如下。

pm2 start ./index.js

执行后,我们会看到类似如下的输出。

pm2可以管理多个服务,被管理的服务会显示在列表中。

在Docker镜像中使用pm2

如果在Docker镜像中使用pm2,只用上面的pm2 start命令是不行的,因为它不会启动前台进程,Docker容器会立刻停止。对于Docker镜像,官方推荐的方式是使用pm2-runtime命令,它在安装pm2时会一同安装,pm2-runtime是官方推荐的用于Docker的启动方式,它集成了更好的日志处理和对容器信号的处理。

pm2-runtime start ./index.js

pm2管理服务命令

pm2提供了一系列命令来管理其维护的进程列表,这里我们简单介绍一下。

pm2 start

启动app.js服务进程。

pm2 start app.js

启动时我们还可以指定一些常用参数:

  • --name:指定应用名称
  • -i <实例数>:启动多个实例(用于负载均衡),使用-i max可以根据CPU核心数自动创建实例
  • --watch:监听文件变化自动重启,生产环境不建议配置

pm2 list

查看服务进程列表。

pm2 list

pm2 stop

停止名字为myapp的服务进程。

pm2 stop myapp

停止pm2表格中序号为1的服务进程。

pm2 stop 1

停止所有服务进程。

pm2 stop all

pm2 restart

重启名字为myapp的服务进程。

pm2 restart myapp

重启pm2表格中序号为1的服务进程。

pm2 restart 1

重启所有服务进程。

pm2 restart all

pm2 reload

重新加载名字为myapp的服务进程(适用于集群模式,实现零停机时间的平滑重启,对于单个实例,其效果类似于pm2 restart)。

pm2 reload myapp

pm2 delete

删除名字为myapp的服务进程。

pm2 delete myapp

删除pm2表格中序号为1的服务进程。

pm2 delete 1

pm2 monit

我们可以使用以下命令查看pm2的监控面板,它是一个控制台TUI程序。

pm2 monit
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。