我在构建项目的jenkins上有一个构建作业,完成后,它会在远程服务器上打开一个ssh shell脚本并传输文件,然后停止并启动一个守护程序。
当我从RHEL服务器上的命令行停止并启动守护程序时,它执行得很好。当作业在詹金斯执行时,没有错误。
守护进程停止正常,它开始正常。但是在开始后不久,守护进程突然死亡。
sudo service daemonName stop
# transfer files.
sudo service daemonName start
我确信问题不在于
有没有人知道Jenkins执行ssh shell脚本的方式会有什么特别之处,这会导致守护程序启动无法完全完成?
答案 0 :(得分:7)
问题: 通过jenkins执行构建时,启动守护程序进程的命令显然已成功执行,但在构建作业完成后,守护程序将突然退出。
解决方案: 我一直以为这是jenkins杀死守护进程。因此,我尝试了许多不同的化身和排列,禁用ProcessTree模块,通过并清理僵尸子进程。我试过通过重置BUILD_ID环境变量来欺骗它。没有任何效果。
感谢这个帖子,我发现该解决方案仅适用于在BUILD机器上执行的子进程。 I.E.不适用于我的问题。
更多搜索引导我到这里:Run a persistent process via ssh
解决方案? NOHUP。
现在,构建通过执行以下命令成功重新启动守护程序: sudo nohup service daemonname start
答案 1 :(得分:6)
Jenkins监视作业产生的进程并杀死它们以避免僵尸进程。 见https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
解决方法是覆盖BUILD_ID
环境变量:
BUILD_ID=dontKillMe