8

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

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

守护进程可以正常停止并且可以正常启动。但在启动后不久,守护进程突然死亡。

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

我确定问题不在于路径

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

4

2 回答 2

8

问题:通过jenkins执行构建时,启动守护进程的命令明明执行成功,但是构建完成后守护进程突然退出。

解决方案:我一直认为是詹金斯杀死了守护进程。所以我尝试了许多不同的化身和排列来禁用 ProcessTree 模块,该模块通过并清理僵尸子进程。我试图通过重置 BUILD_ID 环境变量来欺骗它。没有任何效果。

感谢这个线程,我发现该解决方案仅适用于在 BUILD 机器上执行的子进程。IE 不适用于我的问题。

更多搜索将我带到这里:Run a persistent process via ssh

解决方案?诺哈普。

所以现在构建通过执行以下命令成功地重新启动了守护进程: sudo nohup service daemonname start

于 2013-06-07T21:51:09.470 回答
6

Jenkins 监视作业产生的进程并杀死它们以避免僵尸进程。见https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

解决方法是覆盖BUILD_ID环境变量:

BUILD_ID=dontKillMe
于 2013-05-21T19:05:54.340 回答