PM2 守护进程管理实战指南:jaywcjlove/reference 备忘清单深度解析
2026/9/24 7:47:50 网站建设 项目流程
  • 文档
  • 知识库
  • 教程
  • 开发工具

【免费下载链接】reference

为开发人员分享快速参考备忘清单(速查表)

项目地址:https://gitcode.com/jaywcjlove/reference
点击查看免费下载

PM2 是一个广受欢迎的 Node.js 进程守护(daemon)管理器,用于让应用程序保持在线、自动重启并支持集群负载均衡。本篇以开源仓库 jaywcjlove/reference 中的 PM2 备忘清单 为主体,系统梳理从安装、启动、进程管理到集群模式、生态系统文件与开机自启的完整链路,并逐条解读 CLI 选项与速查命令,帮你快速掌握一套可直接落地的生产级进程管理方案。

认识 PM2 与本文速查表

PM2 以简单直观的 CLI 形式提供守护进程能力:它能托管 Node.js 脚本,也能托管 bash 脚本、Python 脚本乃至二进制可执行文件,并在崩溃后自动拉起、记录日志、暴露实时监控指标。仓库 jaywcjlove/reference 将其整理为一份速查表文档,存放于 docs/pm2.md,并在 README.md 首页索引中收录,与 Bash、Docker、Nginx 等大量开发速查表并列,方便开发者随时检索。

安装与启动应用程序

安装 PM2

最新的 PM2 版本可通过 NPM 或 Yarn 全局安装:

$ npm install pm2@latest -g

或者:

$ yarn global add pm2

安装后pm2命令即可全局使用。仓库使用 Node.js >= 16 作为构建环境(参见 package.json),实际运行 PM2 时同样建议使用较新的 Node 版本。

启动任意类型的应用程序

启动、守护并监控一个应用程序,最简单的方式是指定脚本或可执行文件路径:

$ pm2 start app.js

PM2 并不局限于 Node.js,它可以托管多种运行时:

$ pm2 start bashscript.sh $ pm2 start python-app.py --watch $ pm2 start binary-file -- --port 1520
  • 启动 bash 脚本、Python 脚本时,PM2 会依据文件类型选择对应的解释器执行;
  • 启动二进制文件时,--之后的参数会原样传递给该程序(上例中即把--port 1520传给binary-file)。

常用 CLI 选项

pm2 start支持大量选项,备忘清单中整理了以下高频项:

选项作用
--name <app_name>为应用指定名称,便于后续用名称管理进程
--watch监视文件变更,变更时自动重启应用
--max-memory-restart <200MB>设置内存阈值,应用占用超过该值时自动重启
--log <log_path>指定日志文件路径
-- arg1 arg2 arg3将额外参数传递给被启动的脚本
--restart-delay <delay in ms>设置自动重启之间的延迟(毫秒)
--time为日志行添加时间前缀
--no-autorestart关闭自动重启(应用崩溃时不自动拉起)
--cron <cron_pattern>按 cron 表达式强制定时重启应用
--no-daemon以前台方式运行,日志直接输出到当前终端

这些选项可以自由组合,例如--name my-api --max-memory-restart 300MB --time即可得到一个命名清晰、带内存保护、日志带时间戳的守护进程。

进程生命周期管理

核心管理命令

启动之后,应用的状态由 PM2 守护进程统一管理,常用的生命周期命令如下:

$ pm2 restart app_name $ pm2 reload app_name $ pm2 stop app_name $ pm2 delete app_name
  • restart:停止进程并重新启动,会短暂中断服务;
  • reload:优雅重载,对于网络型(NETWORKED)应用可实现 0 秒停机(详见下文“集群模式”);
  • stop:暂停进程,但保留在 PM2 进程列表中,可通过start再次拉起;
  • delete:将进程从 PM2 列表中彻底移除。

app_name 的两种替代写法

除了直接写应用名称,还可以使用两种通配写法:

  • all—— 作用于所有进程,例如pm2 restart all
  • id—— 作用于指定的进程 ID,例如pm2 restart 0

检查状态、日志与监控指标

应用启动后,可以随时检查运行状态、日志与资源指标:

$ pm2 [list|ls|status] # 列出 PM2 管理的所有应用的状态 $ pm2 logs # 实时流式显示日志 $ pm2 logs --lines 200 # 挖掘旧日志,回看最近 200 行 $ pm2 monit # 适合终端查看的实时仪表板(CPU/内存等) $ pm2 plus # 基于 Web 的跨服务器诊断仪表板(pm2.io)
  • pm2 list(别名lsstatus)展示每个进程的名称、ID、重启次数、运行时长与内存占用;
  • pm2 monit直接在终端渲染实时资源曲线,是排查内存泄漏最常用的命令;
  • 若需要跨多台服务器的集中式可视化监控,可使用pm2 plus接入在线仪表板。

集群模式:自动负载均衡

对于 Node.js 应用,PM2 内置自动负载均衡器,会在每个衍生出的工作进程(worker)之间共享所有 HTTP[s]、Websocket、TCP 与 UDP 连接:

$ pm2 start app.js -i max

-i指定实例数量:

  • -i max(或-i 0)表示根据服务器可用 CPU 核数启动最大数量的进程,充分利用多核;
  • -i 4表示固定启动 4 个实例。

在集群模式下,pm2 reload才能发挥真正价值:它采用滚动方式逐个重启 worker,从而实现请求不间断的零停机发布;而pm2 restart会整体重启,存在短暂服务中断。这也是速查表中强调“reload 对 NETWORKED 应用可实现 0s 停机”的原因。

生态系统文件(Ecosystem File)

当需要管理多个应用、维护复杂环境变量时,可以创建一份声明式配置文件——生态系统文件。生成命令:

$ pm2 ecosystem

该命令会在当前目录生成ecosystem.config.js,典型内容如下:

module.exports = { apps : [{ name: "app", script: "./app.js", env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }, { name: 'worker', script: 'worker.js' }] }

要点解读:

  • apps是应用数组,可同时声明多个应用(上例同时管理appworker两个进程);
  • script指定入口脚本,name指定进程名;
  • env定义默认环境变量;env_production是名为production的环境覆盖块;
  • 启动时配合--env production即可切换环境,例如:
$ pm2 start ecosystem.config.js --env production

当然,也可以直接不带参数启动默认配置:

$ pm2 start ecosystem.config.js

声明式配置把名称、脚本、环境变量固化到文件中,配合版本控制即可实现团队统一的部署约定。

设置开机自启动脚本

服务器重启后,由 PM2 托管的进程不会自动恢复,必须让 PM2 本身随系统启动。解决方法是先保存当前进程快照,再生成系统启动脚本:

$ pm2 save

pm2 save会把当前进程列表写入 dump 文件;随后(在支持 systemd 等 init 系统的环境下)还需执行pm2 startup生成对应的开机启动服务,将 PM2 注册为系统服务,从而在服务器每次启动/重启时自动恢复全部托管进程。备忘清单中强调:“使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要”,这一步是生产环境部署的必选项。

文件变更自动重启

开发场景下,希望代码保存后应用立即生效,只需配合--watch选项:

$ cd /path/to/my/app $ pm2 start env.js --watch --ignore-watch="node_modules"
  • --watch会监视当前目录及所有子文件夹,任何文件变更都会触发应用重启;
  • --ignore-watch="node_modules"用于排除依赖目录,避免安装依赖或 node_modules 内的无关变更反复触发重启。

重启发生后,可以通过日志确认:

$ pm2 logs

日志中会记录进程的重启动作与时间点,方便核对 watch 是否按预期工作。

高频命令速查(CheatSheet)

备忘清单第二部分集中整理了一组高频命令,适合日常随手查阅:

分叉模式(Fork Mode)

$ pm2 start app.js --name my-api # 名称进程

默认即分叉模式,每个应用由独立进程承载,适合普通脚本与单实例服务。

集群模式(Cluster Mode)

$ pm2 start app.js -i 0 # 根据可用 CPU 使用负载均衡启动最大进程 $ pm2 start app.js -i max # 与上面相同(该写法已标记为弃用) $ pm2 scale app +3 # 为 `app` 增加 3 个 worker $ pm2 scale app 2 # 将 `app` 扩展到总共 2 个 worker(可上可下)

pm2 scale支持动态调整实例数:+3表示增量扩容,2表示以 2 为目标的绝对伸缩。

进程清单

$ pm2 list # 显示所有进程状态 $ pm2 jlist # 以原始 JSON 格式打印进程列表 $ pm2 prettylist # 以美化 JSON 格式打印进程列表 $ pm2 describe 0 # 显示特定进程的全部信息 $ pm2 monit # 监控所有进程

jlist/prettylist输出的 JSON 结构便于脚本化集成与 CI 自动化判断进程健康状态。

日志管理

$ pm2 logs [--raw] # 流式显示所有进程日志(--raw 输出原始格式) $ pm2 flush # 清空所有日志文件 $ pm2 reloadLogs # 重新加载所有日志

批量动作

$ pm2 stop all # 停止所有进程 $ pm2 restart all # 重启所有进程 $ pm2 reload all # 零停机重载(适用于 NETWORKED 应用) $ pm2 stop 0 # 停止指定进程 ID $ pm2 restart 0 # 重启指定进程 ID $ pm2 delete 0 # 从 pm2 列表删除指定进程 $ pm2 delete all # 从 pm2 列表删除所有进程

杂项命令

$ pm2 reset <process> # 重置进程元数据(如重启计数) $ pm2 updatePM2 # 更新内存中的 pm2 $ pm2 ping # 确认 pm2 守护进程已启动 $ pm2 sendSignal SIGUSR2 my-app # 向脚本发送系统信号 $ pm2 start app.js --no-daemon $ pm2 start app.js --no-vizion $ pm2 start app.js --no-autorestart
  • pm2 ping返回{ "pong": ... }即表示守护进程存活,常用于健康检查脚本;
  • sendSignal支持向进程发送任意系统信号(如SIGUSR2),便于触发自定义逻辑;
  • --no-vizion用于禁用版本控制系统元数据采集,--no-autorestart用于完全关闭自动重启。

更新 PM2

PM2 的版本升级被设计得很简单,版本之间没有破坏性变化,流程只有两步:

$ npm install pm2@latest -g # 升级全局安装的版本

然后更新内存中正在运行的 PM2 守护进程:

$ pm2 update

pm2 update会以新版本重启守护进程并恢复之前保存的进程列表,配合先前的pm2 save快照即可做到无缝升级,无需手工重新启动每个应用。

在仓库中使用这份速查表

本文内容对应的原始文档位于 docs/pm2.md,采用仓库统一的速查表 Markdown 规范编写(h1大标题 + 介绍文本 +h2分类 +h3卡片式小节)。该仓库通过refs-clidocs/*.md编译为静态 HTML 页面(参见 package.json),本地执行npm run start可监听 Markdown 变化并实时预览,npm run build会输出到dist目录。因此你可以直接在浏览器中以页面形式浏览本文全部命令,也可以在任意开发机上复制命令逐条演练。

至此,从安装启动、选项调优、进程管理、集群伸缩、声明式配置、开机自启到版本升级,PM2 的核心使用路径已全部覆盖。将本文与仓库中的 docs/pm2.md 配合使用,即可在日常开发与生产部署中快速定位任何一条 PM2 命令。

  • 文档
  • 知识库
  • 教程
  • 开发工具

【免费下载链接】reference

为开发人员分享快速参考备忘清单(速查表)

项目地址:https://gitcode.com/jaywcjlove/reference
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询