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