如何修改PM2管理进程的exec cwd路径指向进程专属目录
PM2 进程 exec cwd 零停机迁移到专属目录操作方案
前置准备
- 全量同步根目录下该进程的临时文件:把业务代码、配置文件夹、日志目录、ecosystem配置文件全部复制到进程对应的专属目录,逐一核对配置项:将所有硬编码指向根目录的路径(日志输出路径、配置文件读取路径、依赖引用路径)修改为专属目录内的相对路径或专属目录绝对路径,给专属目录配置和之前一致的运行用户权限。
- 执行
pm2 show <异常进程ID>,记录当前进程的名称、启动参数、环境变量、实例数配置,避免后续配置遗漏。
方案1:符合部署规范的永久修正方案(推荐)
完全匹配既定部署规范,配置持久化不会失效,零停机不影响业务:
- 进入该进程的专属目录,编辑目录内的ecosystem配置文件,显式添加
cwd字段指向当前专属目录的绝对路径,参考配置:
module.exports = { apps: [{ name: "你的业务进程名", script: "./业务启动入口文件路径", // 用专属目录内相对路径即可 cwd: "/data/apps/your-business-exclusive-dir/", // 替换为实际专属目录绝对路径 error_file: "./logs/error.log", out_file: "./logs/output.log", instances: 之前记录的实例数, env: 之前记录的环境变量配置 }] }
- 在专属目录下执行零停机重载命令,让PM2加载新配置:
pm2 reload ecosystem.config.js --update-env
--update-env参数会强制PM2加载新配置里的cwd、环境变量等参数;reload为平滑重启逻辑,新进程启动完成并通过健康检查后才会销毁旧进程,不会中断服务。如果新进程启动失败,PM2会自动保留旧进程对外提供服务,不会影响线上可用性。
- 配置校验:执行
pm2 show <进程ID>,查看输出里的exec cwd字段是否已经指向专属目录,同时验证业务接口正常、日志持续写入到专属目录的logs文件夹内。 - 观察10-15分钟业务无异常后,删除根目录下之前临时存放的该进程相关配置、日志、代码文件,恢复根目录空置状态即可。
方案2:临时快速修正方案(不推荐)
如果暂时来不及整理ecosystem配置,可以用命令行直接修改cwd,注意该方式修改的配置不会自动同步到专属目录的ecosystem文件,后续基于ecosystem重载时会被覆盖:
- 执行以下命令直接更新进程cwd配置并平滑重启:
pm2 reload <异常进程ID> --cwd "/你的专属目录绝对路径" --update-env - 同样执行
pm2 show <进程ID>校验cwd是否生效,验证业务访问正常即可。后续有空记得同步更新专属目录内的ecosystem配置,避免后续重启配置还原。
内容的提问来源于stack exchange,提问作者RomanSmoll
相关产品推荐
相关产品推荐

