ECC /pm2 命令实战指南:自动检测多服务项目并生成 PM2 进程配置与 Claude 命令文件
2026/9/10 22:29:56 网站建设 项目流程

ECC /pm2 命令实战指南:自动检测多服务项目并生成 PM2 进程配置与 Claude 命令文件

【免费下载链接】ECCThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.项目地址: https://gitcode.com/GitHub_Trending/ev/ECC

本文以 ECC 仓库中/pm2命令的定义文档为主线,详解其"项目分析 → 服务检测 → 配置生成"的完整工作流,覆盖 7 类服务类型的检测规则与默认端口、生成文件清单、以及 Windows 环境下ecosystem.config.cjs的编写要点。读完你可以理解如何用该命令为一个多服务项目补齐完整的 PM2 进程生命周期管理能力(启动 / 停止 / 重启 / 日志 / 监控面板),并获得一套可被直接执行的 Claude 自定义命令。

/pm2 命令是什么

/pm2是 ECC 仓库定义的一个 general 类型命令,官方描述为:"Analyze a project and generate PM2 service commands for detected frontend, backend, or database services"(分析项目,为检测到的前端 / 后端 / 数据库服务生成 PM2 服务命令)。该定义注册在 docs/COMMAND-REGISTRY.json:

{ "command": "pm2", "description": "Analyze a project and generate PM2 service commands for detected frontend, backend, or database services.", "type": "general", "path": "commands/pm2.md" }

也就是说:命令主体是 markdown 文件 commands/pm2.md,本文所依据的 docs/es/commands/pm2.md 是它的西班牙语本地化版本,两者共享同一套核心工作流;规范英文版比西语版多出"命令文件模板"与"CLAUDE.md 更新规则"两个章节,后文会结合它做补充。

在仓库的目录总览中,README.md 将该命令定位为/pm2 - PM2 service lifecycle management,COMMANDS-QUICK-REF.md 的命令速查表中也将其列为 "PM2 process manager initialisation"。

工作流:三步完成初始化

/pm2命令的完整工作流分三步:

  1. 检查 PM2 是否可用:若机器上没有 PM2,先执行npm install -g pm2
  2. 扫描项目识别服务:把检测到的组件归类为前端、后端、数据库三类;
  3. 生成配置文件与单独命令文件:包括 PM2 主配置ecosystem.config.cjs.claude/下的 Claude 命令文件 / PowerShell 脚本。

全部生成完成后,命令会输出一个完成摘要(见"Post-Init 摘要"一节)。

服务检测规则与默认端口

各服务类型的检测规则是/pm2命令的核心,它依据以下文件的存在性判断"要启动哪些进程、监听哪个端口":

类型检测依据默认端口
Vitevite.config.*5173
Next.jsnext.config.*3000
Nuxtnuxt.config.*3000
CRApackage.json 中的react-scripts3000
Express/Nodeserver/backend/api目录 + package.json3000
FastAPI/Flaskrequirements.txt/pyproject.toml8000
Gogo.mod/main.go8080

如果项目显式声明了端口,则不必依赖默认值。命令给出了明确的端口检测优先级:

用户指定 > .env > 配置文件 > scripts 参数 > 默认端口

例如一个 Vite 项目,如果在.env中写了PORT=4000,或scripts里的 vite 脚本带了--port 4000,生成配置时就会采用相应端口而不是默认的 5173。

生成的文件清单

执行/pm2后,会在目标项目(注意:不是本仓库,仓库只定义生成规则)中产生如下文件:

project/ ├── ecosystem.config.cjs # PM2 配置 ├── {backend}/start.cjs # Python wrapper(如适用) └── .claude/ ├── commands/ │ ├── pm2-all.md # 启动全部 + monit │ ├── pm2-all-stop.md # 停止全部 │ ├── pm2-all-restart.md # 重启全部 │ ├── pm2-{port}.md # 启动单个 + 日志 │ ├── pm2-{port}-stop.md # 停止单个 │ ├── pm2-{port}-restart.md # 重启单个 │ ├── pm2-logs.md # 查看全部日志 │ └── pm2-status.md # 查看状态 └── scripts/ ├── pm2-logs-{port}.ps1 # 单个服务日志 └── pm2-monit.ps1 # PM2 监控面板

两个设计点值得注意:

  • 命令文件按端口命名(如pm2-3000.md),生成后你只需调用/pm2-3000即可定位要操作的服务;
  • 监控面板与日志查看被单独拆成 PowerShell 脚本.claude/scripts/),因为 Claude 命令文件内容被刻意保持极简(见"关键规则"),重量级的终端操作直接走脚本更可靠。

Windows 配置要点:为什么必须用 ecosystem.config.cjs

西语文档将这一章节标注为 "IMPORTANTE",它也是整个命令中踩坑最多的地方。核心要求是:配置文件必须使用.cjs扩展名(而不是.js。这样做是为了避免项目package.json"type": "module"与 PM2 惯用的 CommonJS 式module.exports配置写法发生冲突。

基础配置示例(Node.js 前端服务):

module.exports = { apps: [ // Node.js (Vite/Next/Nuxt) { name: 'project-3000', cwd: './packages/web', script: 'node_modules/vite/bin/vite.js', args: '--port 3000', interpreter: 'C:/Program Files/nodejs/node.exe', env: { NODE_ENV: 'development' } } ] }

规范英文版 commands/pm2.md 进一步给出了包含 Python 服务在内的完整配置示例和框架脚本路径对照表,当你需要手写或核对生成配置时可直接参考:

module.exports = { apps: [ // Node.js (Vite/Next/Nuxt) { name: 'project-3000', cwd: './packages/web', script: 'node_modules/vite/bin/vite.js', args: '--port 3000', interpreter: 'C:/Program Files/nodejs/node.exe', env: { NODE_ENV: 'development' } }, // Python { name: 'project-8000', cwd: './backend', script: 'start.cjs', interpreter: 'C:/Program Files/nodejs/node.exe', env: { PYTHONUNBUFFERED: '1' } } ] }
框架scriptargs
Vitenode_modules/vite/bin/vite.js--port {port}
Next.jsnode_modules/next/dist/bin/nextdev -p {port}
Nuxtnode_modules/nuxt/bin/nuxt.mjsdev --port {port}
Expresssrc/index.jsserver.js-

这张表对应着两条关键规则:

  • Node.js 服务的script直接指向框架 bin 文件,并显式用interpreter指定 Node 可执行文件绝对路径,以此规避 PM2 在 Windows 下解析npm run类脚本的不可靠行为;
  • Python 服务不直接指向.py文件,而是指向一个 Node.js wrapper 脚本start.cjs。英文版给出了 wrapper 的实现:
const { spawn } = require('child_process'); const proc = spawn('python', ['-m', 'uvicorn', 'app.main:app', '--host', '0.0.0.0', '--port', '8000', '--reload'], { cwd: __dirname, stdio: 'inherit', windowsHide: true }); proc.on('close', (code) => process.exit(code));

其中windowsHide: true用于隐藏子进程黑窗,stdio: 'inherit'保证 uvicorn 的日志能被 PM2 收集,proc.on('close')转发退出码让 PM2 能正确感知 Python 服务崩溃并触发重启策略。

关键规则(Reglas Clave)

文档归纳了六条关键规则,它们本质上是"生成文件必须能直接跑"的 Windows 落地清单:

  1. 配置文件ecosystem.config.cjs(不是 .js);
  2. Node.js:直接指定 bin 路径 + interpreter;
  3. Python:Node.js wrapper 脚本 +windowsHide: true
  4. 打开新窗口start wt.exe -d "{path}" pwsh -NoExit -c "command"
  5. 内容极简:每个命令文件只有 1-2 行描述 + 一个 bash 代码块;
  6. 直接执行:无需 AI 解析,直接运行 bash 命令即可。

第 5、6 条决定了生成的.claude/commands/*.md文件形态:每个文件就是"一两句话 + 一个 bash 块"。英文版给出了全部模板,例如pm2-all.md(启动全部服务并打开监控):

Start all services and open PM2 monitor. ```bash cd "{PROJECT_ROOT}" && pm2 start ecosystem.config.cjs && start wt.exe -d "{PROJECT_ROOT}" pwsh -NoExit -c "pm2 monit" ```

pm2-{port}.md(启动单个服务并打开日志):

Start {name} ({port}) and open logs. ```bash cd "{PROJECT_ROOT}" && pm2 start ecosystem.config.cjs --only {name} && start wt.exe -d "{PROJECT_ROOT}" pwsh -NoExit -c "pm2 logs {name}" ```

其余pm2-all-stop.md/pm2-all-restart.md/pm2-{port}-stop.md/pm2-{port}-restart.md/pm2-logs.md/pm2-status.md模板结构相同(分别执行pm2 stop all/pm2 restart all/pm2 stop {name}/pm2 restart {name}/pm2 logs/pm2 status,均以cd "{PROJECT_ROOT}" &&开头)。两个 PowerShell 脚本同样极简:

# pm2-logs-{port}.ps1 Set-Location "{PROJECT_ROOT}" pm2 logs {name}
# pm2-monit.ps1 Set-Location "{PROJECT_ROOT}" pm2 monit

规则 4 中start wt.exe -d "{PROJECT_ROOT}" pwsh -NoExit -c "..."的作用是:在 Windows Terminal 中打开一个独立 PowerShell 窗口运行需要常驻的命令(monit / logs),-NoExit让命令结束后窗口保持打开,主会话不被阻塞。

补充:生成后更新项目 CLAUDE.md 并输出摘要

规范英文版 commands/pm2.md 还定义了文件生成完成后的两个动作:

  1. 更新目标项目的CLAUDE.md:追加一个## PM2 Services小节,内容为服务表(Port / Name / Type)加常用终端命令;若该小节已存在则替换,不存在则追加到文件末尾,且保持内容最小化;
  2. 输出完成摘要。西语版给出的摘要格式如下:
## PM2 Init Completado **Servicios:** | Puerto | Nombre | Tipo | |--------|--------|------| | {puerto} | {nombre} | {tipo} | **Comandos Claude:** /pm2-all, /pm2-all-stop, /pm2-{puerto}, /pm2-{puerto}-stop, /pm2-logs, /pm2-status **Comandos de Terminal:** pm2 start ecosystem.config.cjs # Primera vez pm2 start all # Después de la primera vez pm2 stop all / pm2 restart all pm2 logs / pm2 status / pm2 monit pm2 resurrect # Restaurar lista guardada

英文版摘要的终端命令部分更完整,把"首次"与"此后"分开,并额外给出pm2 save提示(首次启动后执行pm2 save持久化进程列表,之后即可用简化的pm2 start all/pm2 resurrect命令):

pm2 start ecosystem.config.cjs && pm2 save # First time pm2 start all / pm2 stop all / pm2 restart all pm2 start {name} / pm2 stop {name} pm2 logs / pm2 status / pm2 monit pm2 save / pm2 resurrect

适用前提与范围说明

为避免误用该命令,需要注意以下前提:

  • 目标平台是 Windows(PowerShell / Windows Terminal):文档中的.cjs要求、interpreter绝对路径、start wt.exe.ps1脚本等模板全部面向 Windows 环境设计;
  • PM2 需预先可用:命令仅在缺失时通过npm install -g pm2自动安装;
  • 生成文件落在目标项目,而非本仓库:本仓库提供的是命令定义(检测、配置与生成规则)。你在业务项目中实际运行/pm2后,生成的ecosystem.config.cjs.claude/commands/目录位于该业务项目中。

若想继续深入,建议的入口:西语版本文档 docs/es/commands/pm2.md、含全部模板与 CLAUDE.md 更新规则的规范英文版 commands/pm2.md、命令注册信息 docs/COMMAND-REGISTRY.json,以及命令速查表 COMMANDS-QUICK-REF.md。

【免费下载链接】ECCThe agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.项目地址: https://gitcode.com/GitHub_Trending/ev/ECC

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

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

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

立即咨询