Jenkins似乎是通过ssh启动的脚本中nohup的目标,我该如何防止?

时间:2012-03-05 13:27:57

标签: unix ssh jenkins

我正在尝试创建一个Jenkins作业,该作业重新启动一个在我们的某个服务器上一直运行的程序。

我将以下命令指定为要运行的命令:

cd /usr/local/tool && ./tool stop && ./tool start

脚本'工具'包含如下行:

nohup java NameOfClass &

它的输出最终在我的构建控制台而不是在nohup.out中,因此作业永远不会终止,除非我手动终止它,这会终止程序。

如何让nohup的行为方式与终端相同?

4 个答案:

答案 0 :(得分:7)

如果我正确理解了这个问题,Jenkins会在构建结束时终止所有进程,并且您希望在构建完成后继续运行某些进程。

您应该阅读https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

基本上,Jenkins在BUILD_ID环境变量中搜索具有一些秘密值的进程。只需覆盖您想要独处的流程。

答案 1 :(得分:0)

尝试在Jenkins构建步骤中添加&并使用> nohup.out重定向输出。

答案 2 :(得分:0)

我从jenkins运行shell脚本作为后台进程时遇到了类似的问题。我使用以下命令修复它:

BUILD_ID = dontKillMe nohup ./start-fitnesse.sh&

在你的情况下, BUILD_ID = dontKillMe nohup java NameOfClass&

答案 3 :(得分:0)

在新的管道作业中,设置BUILD_ID不再阻止Jenkins在作业完成后终止您的进程。相反,您需要设置JENKINS_NODE_COOKIE

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java NameOfClass &'

有关详细信息,请参阅the wiki on ProcessTreeKillerthis comment in the Jenkins Jira