在通过ssh启动的脚本中,Jenkins似乎是nohup的目标,我该如何防止这种情况发生



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

我指定以下内容作为要运行的命令:

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

脚本"工具"包含一行类似于:

nohup java NameOfClass &

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

如何使nohup的行为与在终端上的行为相同?

如果我正确理解了这个问题,Jenkins将在构建结束时杀死所有进程,您希望在构建完成后让一些进程继续运行。

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

本质上,Jenkins在BUILD_ID环境变量中搜索具有某些秘密值的进程。只需为您希望独处的进程覆盖它。

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

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java NameOfClass &'

有关更多信息,请参阅ProcessTreeKiller上的wiki和Jenkins Jira中的此评论。

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

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

BUILD_ID=dontKillMe nohup/start-fitnesse.sh&

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

相关内容

  • 没有找到相关文章

最新更新