解决jenkins结束后kill掉衍生进程

前提nohup命令在命令行正常执行,仅限Jenkins执行脚本中nohup命令或SCM中执行错误或直接退出

1.问题

通过jenkins执行shell脚本时,脚本中是通过nohup java -jar &的方式启动,显示执行成功,但是服务却没启动,脚本如下:

nohup /usr/src/java/bin/java -Xms512m -Xmx512m -jar /opt/application/apps/finance-business-product-web-1.0.1.jar --spring.profiles.active=uat  >/opt/application/logs/product-web.log 2>&1 &

也就是说当通过Jenkins构建完后推送到业务服务器,在执行脚本时,脚本中的 nohup 命令无法正常退出,构建前台任务就卡住了,或者是nohup总是无效直接退出了。

2.排查

1.在命令行执行nohup命令,命令正常执行

2.Jenkins调用脚本执行非nohup命令,脚本执行正常

排查结论:jenkins执行非nohup命令,脚本执行正常,执行带有nohup脚本的时候出现了问题。也就是说构建命令中如果带有 nohup xxx & 触发构建后并构建成功后,虽然但在构建任务的输出中却显示没有问题,也没有任何报错,但是并没有执行shell脚本。

3.原因

jenkins默认会在构建完成后,杀掉构建过程中由shell命令触发的衍生进程。

jenkins根据BUILD_ID识别某个进程是否为构建过程的衍生进程,故修改BUILD_ID后,jenkins就无法识别是否为衍生进程,则此进程能在后台保留运行。

结论就是Jenkins程序只负责运行伪命令行nuhup 命令,并不保证是否成功运行 nuhup后面的命令。

4.解决

1.使用 BUILD_ID=xxx ,其中xxx可以是任意内容(只要不是原来的BUILD_ID内容即可)

#! /bin/bash
BUILD_ID=dontKillMe
nohup /usr/src/java/bin/java -Xms512m -Xmx512m -jar /opt/application/apps/finance-business-product-web-1.0.1.jar --spring.profiles.active=uat  >/opt/application/logs/product-web.log 2>&1 &

2.修改Jenkins启动参数

在JENKINS JAVA_OPTIONS中加入-Dhudson.util.ProcessTree.disable=true。需要重启jenkins生效

此方法配置一次后,所有的job都无需设置BUILD_ID,就能够防止jenkins杀死启动的tomcat进程

3.使用at now代替nohup命令(需要atd服务运行)

#! /bin/bash
set +e #执行的时候如果出现了返回值为非零将会继续执行下面的脚本
echo "/usr/src/java/bin/java -Xms512m -Xmx512m -jar /opt/application/apps/finance-business-product-web-1.0.1.jar --spring.profiles.active=uat  >/opt/application/logs/product-web.log" | at now

5.pipeline解决方法

在 Jenkins Pipeline 中,请使用JENKINS_NODE_COOKIE而不是BUILD_ID。

 

官方文档:https://www.jenkins.io/doc/book/managing/spawning-processes/#workarounds

抄自于:https://www.cnblogs.com/whm-blog/p/16779474.html

 

posted @ 2024-08-14 18:46  百衲本  阅读(138)  评论(0编辑  收藏  举报
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码