通过Jenkins在远程服务器上启动守护进程SSH shell脚本神秘地退出

时间:2013-05-21 10:34:56

标签: shell ssh jenkins daemon

我在构建项目的jenkins上有一个构建作业,完成后,它会在远程服务器上打开一个ssh shell脚本并传输文件,然后停止并启动一个守护程序。

当我从RHEL服务器上的命令行停止并启动守护程序时,它执行得很好。当作业在詹金斯执行时,没有错误。

守护进程停止正常,它开始正常。但是在开始后不久,守护进程突然死亡。

sudo service daemonName stop
# transfer files.
sudo service daemonName start

我确信问题不在于

有没有人知道Jenkins执行ssh shell脚本的方式会有什么特别之处,这会导致守护程序启动无法完全完成?

2 个答案:

答案 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