ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PM2 守护进程管理实战指南:jaywcjlove/reference 备忘清单深度解析

PM2 守护进程管理实战指南:jaywcjlove/reference 备忘清单深度解析 文档知识库教程开发工具【免费下载链接】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 pm2latest -g或者$ yarn global add pm2安装后pm2命令即可全局使用。仓库使用 Node.js 16 作为构建环境参见 package.json实际运行 PM2 时同样建议使用较新的 Node 版本。启动任意类型的应用程序启动、守护并监控一个应用程序最简单的方式是指定脚本或可执行文件路径$ pm2 start app.jsPM2 并不局限于 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_namerestart停止进程并重新启动会短暂中断服务reload优雅重载对于网络型NETWORKED应用可实现 0 秒停机详见下文“集群模式”stop暂停进程但保留在 PM2 进程列表中可通过start再次拉起delete将进程从 PM2 列表中彻底移除。app_name 的两种替代写法除了直接写应用名称还可以使用两种通配写法all—— 作用于所有进程例如pm2 restart allid—— 作用于指定的进程 ID例如pm2 restart 0。检查状态、日志与监控指标应用启动后可以随时检查运行状态、日志与资源指标$ pm2 [list|ls|status] # 列出 PM2 管理的所有应用的状态 $ pm2 logs # 实时流式显示日志 $ pm2 logs --lines 200 # 挖掘旧日志回看最近 200 行 $ pm2 monit # 适合终端查看的实时仪表板CPU/内存等 $ pm2 plus # 基于 Web 的跨服务器诊断仪表板pm2.iopm2 list别名ls、status展示每个进程的名称、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是应用数组可同时声明多个应用上例同时管理app与worker两个进程script指定入口脚本name指定进程名env定义默认环境变量env_production是名为production的环境覆盖块启动时配合--env production即可切换环境例如$ pm2 start ecosystem.config.js --env production当然也可以直接不带参数启动默认配置$ pm2 start ecosystem.config.js声明式配置把名称、脚本、环境变量固化到文件中配合版本控制即可实现团队统一的部署约定。设置开机自启动脚本服务器重启后由 PM2 托管的进程不会自动恢复必须让 PM2 本身随系统启动。解决方法是先保存当前进程快照再生成系统启动脚本$ pm2 savepm2 save会把当前进程列表写入 dump 文件随后在支持 systemd 等 init 系统的环境下还需执行pm2 startup生成对应的开机启动服务将 PM2 注册为系统服务从而在服务器每次启动/重启时自动恢复全部托管进程。备忘清单中强调“使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要”这一步是生产环境部署的必选项。文件变更自动重启开发场景下希望代码保存后应用立即生效只需配合--watch选项$ cd /path/to/my/app $ pm2 start env.js --watch --ignore-watchnode_modules--watch会监视当前目录及所有子文件夹任何文件变更都会触发应用重启--ignore-watchnode_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-autorestartpm2 ping返回{ pong: ... }即表示守护进程存活常用于健康检查脚本sendSignal支持向进程发送任意系统信号如SIGUSR2便于触发自定义逻辑--no-vizion用于禁用版本控制系统元数据采集--no-autorestart用于完全关闭自动重启。更新 PM2PM2 的版本升级被设计得很简单版本之间没有破坏性变化流程只有两步$ npm install pm2latest -g # 升级全局安装的版本然后更新内存中正在运行的 PM2 守护进程$ pm2 updatepm2 update会以新版本重启守护进程并恢复之前保存的进程列表配合先前的pm2 save快照即可做到无缝升级无需手工重新启动每个应用。在仓库中使用这份速查表本文内容对应的原始文档位于 docs/pm2.md采用仓库统一的速查表 Markdown 规范编写h1大标题 介绍文本 h2分类 h3卡片式小节。该仓库通过refs-cli将docs/*.md编译为静态 HTML 页面参见 package.json本地执行npm run start可监听 Markdown 变化并实时预览npm run build会输出到dist目录。因此你可以直接在浏览器中以页面形式浏览本文全部命令也可以在任意开发机上复制命令逐条演练。至此从安装启动、选项调优、进程管理、集群伸缩、声明式配置、开机自启到版本升级PM2 的核心使用路径已全部覆盖。将本文与仓库中的 docs/pm2.md 配合使用即可在日常开发与生产部署中快速定位任何一条 PM2 命令。赞分享文档知识库教程开发工具【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址https://gitcode.com/jaywcjlove/reference点击查看免费下载相关推荐Docker 命令速查与实战指南jaywcjlove/reference 容器化备忘清单Docker 命令速查与实战指南jaywcjlove/reference 容器化备忘清单 本文基于 jaywcjlove/reference 开源仓库中的 D文档知识库教程开发工具JavaScript 速查表jaywcjlove/reference 中的 JavaScript 备忘清单全解析JavaScript 速查表jaywcjlove/reference 中的 JavaScript 备忘清单全解析 本指南以开源仓库 jaywcjlove/re文档知识库教程开发工具HTML 与 HTML5 速查手册Jaywcjlove Reference 项目 HTML 备忘清单实战详解HTML 与 HTML5 速查手册Jaywcjlove Reference 项目 HTML 备忘清单实战详解 本指南以开源仓库 jaywcjlove/refe文档知识库教程开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表