我正在尝试创建一个Jenkins作业,该作业重新启动一个在我们的某个服务器上一直运行的程序。
我将以下命令指定为要运行的命令:
cd /usr/local/tool && ./tool stop && ./tool start
脚本'工具'包含如下行:
nohup java NameOfClass &
它的输出最终在我的构建控制台而不是在nohup.out中,因此作业永远不会终止,除非我手动终止它,这会终止程序。
如何让nohup的行为方式与终端相同?
答案 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 ProcessTreeKiller和this comment in the Jenkins Jira。