更新:根据下面的讨论,我编辑了我的答案以获得更准确的描述。
我正在尝试从詹金斯运行 nohup 命令。完整的命令是
nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &
该命令不起作用。我可以在 jenkins 中看到状态为成功,但在 linux 中没有 java 进程。当我执行 'ps -ef | 时grep java'
但是,当我删除最后一个 '&' 时,我将其从在前台运行而不是在后台运行更改为
它开始工作。我可以看到java进程启动了。
如果我在 Linux 控制台上运行原始命令,则它可以正常工作。
我需要以原始形式从詹金斯运行它,作为后台进程。这样它就独立于詹金斯了。
有任何线索为什么会发生这种情况吗?
长话短说,一旦作业完成,詹金斯就会杀死该作业产生的所有进程。要覆盖此行为,您需要设置一个环境变量。
该变量似乎因工作类型而异。它曾经是BUILD_ID
,但对于管道作业来说是JENKINS_NODE_COOKIE
,还有其他几个提到这个答案 https://devops.stackexchange.com/a/1513/6377.
因此,如果您在 Pipeline 中运行命令,它将如下所示:
sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &'
See ProcessTreeKiller 上的 wiki https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller and 了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)