PM2设置stop_exit_codes不生效无法停止自动重启该如何解决?
PM2 stop_exit_codes 配置不生效解决方案
1. 核心问题:PM2版本过低
stop_exit_codes 配置项及对应的命令行参数是PM2 v4.2.0版本才新增的特性,低于该版本的PM2会出现配置不生效、命令行参数无法识别的报错。
修复步骤:
- 查看当前PM2版本:
pm2 -v - 升级到最新稳定版:
npm install pm2@latest -g - 升级PM2后台守护进程(必须执行,否则旧的常驻进程依然不支持新特性):
pm2 update
2. 配置生效注意事项
如果之前已经启动过对应脚本,直接执行pm2 restart不会加载新的配置,需要执行以下操作:
- 先删除旧的进程实例:
pm2 delete "My script"或者pm2 delete ecosystem.config.js - 重新加载配置启动:
pm2 start ecosystem.config.js
注意:请确保配置中没有添加
autorestart: false参数,该参数会覆盖所有重启策略配置,导致stop_exit_codes失效。
3. 命令行启动的正确写法
版本升级后,你使用的命令行参数写法即可正常生效:pm2 start index.js --stop-exit-codes 2
4. 适配你的需求的配置调整
你的需求是「仅当退出码0正常退出时才重启,其他错误退出都不重启」,可以将stop_exit_codes设置为1-255的所有非0退出码,配置示例:
module.exports = { apps : [{ name : "My script", script : "./index.js", // 所有非0退出码都触发停止重启逻辑 stop_exit_codes: Array.from({length: 255}, (_, i) => i + 1) }] }
如果不需要覆盖所有非0退出码,仅需要针对特定退出码(比如2)停止重启,保留你原来的配置即可
5. 验证方式
启动后执行pm2 status查看进程状态,当进程以配置的退出码退出后,进程状态会变为stopped而非restarting/errored,即代表配置生效。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

