在 Jenkins 的使用中,遇到过的一个场景是:使用 python 自动执行 tomcat bin 目录下的 startup.bat 开启批处理,服务开启成功后就随着 python 脚本执行结束该服务就被杀死,开始以为是 python 脚本的问题,但是直接执行是没有问题的;之后一直查运行环境差异,发现也不是这个原因;到后来才怀疑到 Jenkins 任务结束时候自动关掉了所有的子进程。通过以下 shell 脚本片段解决了问题:
1.第一种方案: #临时改变 BUILD_ID 值,使得 Jenkins 不会找到并结束掉 python 脚本启动的后台进程
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
./run.sh restart
#改回原来的 BUILD_ID 值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
问题的根本在于是 Jenkins 使用 processTreeKiller 杀掉了所有子进程,而且这是 Jenkins 的默认行为。其实回头来看这个问题,就发现 Jenkins 的做法非常合理。当一次 build 异常结束,或被人终止时,必然需要结束所有这次 build 启动的子进程。下面的 link 提供了更多细节,以及解决方法。https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
2.第二种方案:
使用 jenkins 的批处理或者 ant 启动 tomcat 失败。查了一下原因说是 jenkins 在脚本执行结束后,就认为任务结束了,但是脚本启动的相关子程序仍然在运行。由于 jenkins 认为任务已经结束了,就结束了该构建相关的子进程。
解决办法:增加一个环境变量。
BUILD_ID=pleaseDontKillMe and it works like a charm。
可以添加在执行任务的节点设置中添加该变量。
解决详细步骤:
前置说明:我是通过 slave 节点来启动 tomcat 的,所以再 slave 节点配置上述环境变量。
**
**
**
**在 Jenkins 的使用中,遇到过的一个场景是:使用 python 自动执行 tomcat bin 目录下的 startup.bat 开启批处理,服务开启成功后就随着 python 脚本执行结束该服务就被杀死,开始以为是 python 脚本的问题,但是直接执行是没有问题的;之后一直查运行环境差异,发现也不是这个原因;到后来才怀疑到 Jenkins 任务结束时候自动关掉了所有的子进程。通过以下 shell 脚本片段解决了问题:
1.第一种方案: #临时改变 BUILD_ID 值,使得 Jenkins 不会找到并结束掉 python 脚本启动的后台进程
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
./run.sh restart
#改回原来的 BUILD_ID 值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
问题的根本在于是 Jenkins 使用 processTreeKiller 杀掉了所有子进程,而且这是 Jenkins 的默认行为。其实回头来看这个问题,就发现 Jenkins 的做法非常合理。当一次 build 异常结束,或被人终止时,必然需要结束所有这次 build 启动的子进程。下面的 link 提供了更多细节,以及解决方法。https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
2.第二种方案:
使用 jenkins 的批处理或者 ant 启动 tomcat 失败。查了一下原因说是 jenkins 在脚本执行结束后,就认为任务结束了,但是脚本启动的相关子程序仍然在运行。由于 jenkins 认为任务已经结束了,就结束了该构建相关的子进程。
解决办法:增加一个环境变量。
BUILD_ID=pleaseDontKillMe and it works like a charm。
可以添加在执行任务的节点设置中添加该变量。
解决详细步骤:
前置说明:我是通过 slave 节点来启动 tomcat 的,所以再 slave 节点配置上述环境变量。
**
**
**
**
原文链接:https://blog.csdn.net/qq_25559693/article/details/72844340
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于