PM2 是一个守护进程管理器,它将帮助您管理和保持您的应用程序在线。PM2 入门非常简单,它以简单直观的 CLI 形式提供
入门
安装
最新的 PM2 版本可通过 NPM 或 Yarn 安装
1 | npm install pm2@latest -g |
或者
1 | yarn global add pm2 |
启动应用程序
启动、守护进程和监视应用程序的最简单方法是使用此命令行
1 | pm2 start app.js |
或者轻松启动任何其他应用程序
1 | pm2 start bashscript.sh |
您可以传递给 CLI 的一些选项
指定应用名称
1 | --name <app_name> |
文件更改时监视并重新启动应用程序
1 | --watch |
设置应用重新加载的内存阈值
1 | --max-memory-restart <200MB> |
指定日志文件
1 | --log <log_path> |
将额外的参数传递给脚本
1 | -- arg1 arg2 arg3 |
自动重启之间的延迟
1 | --restart-delay <delay in ms> |
带时间的前缀日志
1 | --time |
不要自动重启应用程序
1 | --no-autorestart |
指定 cron 强制重启
1 | --cron <cron_pattern> |
附加到应用程序日志
1 | --no-daemon |
管理流程
管理应用程序状态很简单,这里是命令
1 | pm2 restart app_name |
你可以传递而不是 app_name
all
作用于所有进程id
作用于特定的进程 ID
检查状态、日志、指标
现在您已经启动了这个应用程序,您可以检查它的状态、日志、指标,甚至可以使用 pm2.io 获取在线仪表板
列出PM2管理的所有应用的状态
1 | pm2 [list|ls|status] |
实时显示日志
1 | pm2 logs |
挖掘旧日志
1 | pm2 logs --lines 200 |
这是一个直接适合您的终端的实时仪表板
1 | pm2 monit |
基于 Web 的仪表板,具有诊断系统的跨服务器
1 | pm2 plus |
集群模式
对于 Node.js 应用程序,PM2 包括一个自动负载均衡器,它将在每个衍生进程之间共享所有 HTTP[s]/Websocket/TCP/UDP 连接
以集群模式启动应用程序
1 | pm2 start app.js -i max |
在 此处 阅读有关集群模式的更多信息
生态系统文件
您还可以创建一个称为生态系统文件的配置文件来管理多个应用程序。生成生态系统文件
1 | pm2 ecosystem |
这将生成一个 ecosystem.config.js
文件
1 | module.exports = { |
并轻松启动
1 | pm2 start ecosystem.config.js |
在 此处 阅读有关应用程序声明的更多信息
设置启动脚本
使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要。为了解决这个问题,只需运行这个命令来生成一个活动的启动脚本
1 | pm2 save |
在 此处 阅读有关启动脚本生成器的更多信息
重新启动应用程序更改
使用 --watch
选项非常简单
1 | cd /path/to/my/app |
这将在当前目录 +
所有子文件夹中的任何文件更改时监视并重新启动应用程序,并且它将忽略 node_modules
文件夹中的任何更改 --ignore-watch="node_modules"
。
1 | $ pm2 logs |
然后,您可以使用上面命令来检查重新启动的应用程序日志。
PM2 CheatSheet
以下是一些值得了解的命令。 只需使用示例应用程序或开发机器上当前的 Web 应用程序来尝试它们
PM2 分叉模式
1 | pm2 start app.js --name my-api # 名称进程 |
PM2 集群模式
1 | pm2 start app.js -i 0 # 将根据可用的 CPU 使用 LB 启动最大进程 |
PM2 清单
1 | pm2 list # 显示所有进程状态 |
PM2 日志
1 | pm2 logs [--raw] # 在流中显示所有进程日志 |
PM2 动作
1 | pm2 stop all # 停止所有进程 |
PM2 杂项
1 | pm2 reset <process> # 重置元数据(重启时间...) |
更新 PM2
我们让它变得简单,版本之间没有重大变化,过程很简单
1 | npm install pm2@latest -g |
然后更新内存中的PM2
1 | pm2 update |
另见
- QUICK START (pm2.keymetrics.io)