You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PM2未将退出码为1的应用判定为错误且不自动重启如何解决?

PM2 异常退出不重启问题解决方法

核心根因

你遇到的状态误判问题本质是PM2的进程追踪错位:使用yarn作为启动入口时,PM2默认只监听yarn本身的父进程状态,不会自动追踪yarn派生出来的实际Node.js业务子进程。当业务子进程抛错以退出码1终止时,如果yarn父进程没有同步退出,PM2就会持续误判应用状态为online,自然不会触发自动重启逻辑。
你其中一个项目升级PM2 v5.2.0后恢复,只是刚好该项目的yarn版本和PM2 v5.2.0的子进程追踪逻辑兼容,不代表所有版本组合都能正常工作。

可落地解决步骤(按优先级排序)

  • 优先替换启动方式,从根源规避进程追踪问题
    生产环境不要用yarn/npm作为PM2的启动入口,直接指向编译后的业务入口文件,让PM2直接托管业务Node进程。比如你的start:prod脚本实际执行的是node dist/main.js,就把启动命令替换为:
    pm2 start dist/main.js --name project-name
    
    这种方式下PM2可以100%捕获进程的所有退出信号、异常崩溃事件,不会出现状态误判,也是PM2推荐的生产启动方案。
  • 若必须保留yarn脚本启动方式,先做版本对齐
    对比两个项目的yarn版本:如果出问题的项目用的是Yarn Berry(v2+),PM2 v5.2.0本身对该版本yarn的子进程追踪存在兼容bug,要么把yarn降级到1.22.x稳定版,要么把PM2升级到v5.3.0以上版本再测试。
  • 排查旧配置干扰
    先执行以下命令清理PM2里残留的旧进程配置和缓存:
    pm2 delete project-name
    pm2 cleardump
    
    同时检查出问题项目根目录下是否存在遗留的ecosystem.config.js配置文件,如果配置里写了autorestart: false、max_restarts: 0这类规则,PM2会优先读取文件配置,哪怕命令行没传对应参数也会导致重启逻辑失效。
  • 定位具体追踪异常
    重新启动应用时加上--no-daemon参数让PM2前台运行,触发业务报错后直接看控制台输出,就能明确是yarn父进程未随子进程退出,还是PM2没有捕获到子进程的退出事件,针对性调整即可。

验证标准

调整完成后主动触发业务代码抛错,若PM2日志中打印出应用退出记录、状态从online切换为restarting,即代表修复生效。

内容的提问来源于stack exchange,提问作者JaffParker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:45:44