您的位置:首页 > 运维架构 > Tomcat

使用Jenkins的任务自动跑脚本后发现,tomcat服务刚启动就被杀死

2017-06-02 14:53 302 查看
在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节点配置上述环境变量。









内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐