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

通过Jenkins流水线执行pm2 start启动Python脚本后进程自动停止问题排查

问题原因

  • 核心是Jenkins默认开启的进程树清理机制:为了避免构建任务结束后残留孤儿进程占用服务器资源,Jenkins会在单轮构建完成时,向本次构建启动的所有子进程所属进程组发送SIGTERM信号,批量终止所有相关进程。你在pm2日志中看到的进程收到SIGTERM信号退出,完全符合这个机制的行为特征。
  • 你在Jenkins控制台看到的pm2启动成功是构建结束前的瞬时状态,等构建标记为成功后,清理机制触发,pm2和它托管的Python进程就会被统一杀掉,所以登录EC2实例后看不到存活进程。

验证方法

你可以在start_pm2.sh脚本的最后加入sleep 60命令,在构建运行的这60秒内登录EC2,以jenkins用户身份执行pm2 list,可以看到进程处于正常运行状态,等60秒后构建结束,进程就会自动消失,即可确认是该机制导致的问题。

解决方案

在执行pm2启动脚本的步骤,临时禁用Jenkins的进程清理规则即可,只需添加对应的环境变量:

声明式Pipeline写法

stage('部署启动') {
    environment {
        BUILD_ID = 'dontKillMe'
    }
    steps {
        sh './start_pm2.sh'
    }
}

脚本式/直接在Shell步骤设置写法

sh 'BUILD_ID=dontKillMe ./start_pm2.sh'

注意:如果你使用的是Jenkins 2.30及以上版本的Pipeline,清理规则对应的环境变量改为JENKINS_NODE_COOKIE,如果设置BUILD_ID不生效,替换为JENKINS_NODE_COOKIE=dontKillMe即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:48:03