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

Unix 在通过ssh启动的脚本中,Jenkins似乎是nohup的目标,我该如何防止这种情况?,unix,ssh,jenkins,Unix,Ssh,Jenkins,我正在尝试创建一个Jenkins作业,该作业将重新启动一个始终在我们的一台服务器上运行的程序 我指定以下内容作为要运行的命令: cd /usr/local/tool && ./tool stop && ./tool start 脚本“工具”包含一行,如: nohup java NameOfClass & 它的输出在我的构建控制台中结束,而不是在nohup.out中,因此作业永远不会终止,除非我手动终止它,这会终止程序 如何使nohup的行为与终端相同?

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

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

cd /usr/local/tool && ./tool stop && ./tool start
脚本“工具”包含一行,如:

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


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

如果我正确理解了问题,请尝试在Jenkins构建步骤中添加
&
,并使用
>nohup.out
重定向输出,Jenkins将在构建结束时终止所有进程,您希望在构建完成后让某些进程保持运行

你应该读书


本质上,Jenkins在BUILD_ID环境变量中搜索具有某些秘密值的进程。只需重写它,就可以让您自己处理。

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

BUILD\u ID=dontKillMe nohup./start-fitnesse.sh&

就你而言,
BUILD\u ID=dontKillMe nohup java NameOfClass&

在新的管道作业中,设置
BUILD\u ID
不再阻止Jenkins在作业完成后终止进程。相反,您需要设置
JENKINS\u NODE\u COOKIE

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java NameOfClass &'

有关更多信息,请参阅和。

这两种方法似乎都没有帮助。nohup隐式重定向到一个名为nohup.out的文件,脚本中调用nohup的那一行已经以结束&实际上,在我通过单击Jenkins中的stop图标杀死它之前,构建不会终止,它在那里显示了nohup应该运行的命令的输出。我将阅读您发布的背景链接,但我猜它解决了相反的问题。该链接中的BUILD\u ID环境变量看起来很有希望。BUILD\u ID停止工作了吗?什么都试过了,但没能成功。