更新:基于下面的讨论,我已经编辑了我的答案更准确的描述。
我正在尝试从jenkins运行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控制台上运行它,原始命令工作正常。
我需要从jenkins运行它的原始形式,这是作为一个后台进程。所以它是独立的jenkins。
有线索说明为什么会这样吗?
8条答案
按热度按时间jecbmhm31#
简而言之,Jenkins会在作业完成后终止由该作业产生的所有进程。要覆盖此行为,您需要设置一个环境变量。
该变量似乎因作业类型而异。它以前是
BUILD_ID
,但对于管道作业,它是JENKINS_NODE_COOKIE
,并且在this answer中提到了其他几个变量。因此,如果您在Pipeline中运行命令,它将如下所示:
有关更多信息,请参见Jenkins Jira中的the wiki on ProcessTreeKiller和此注解。
krugob8w2#
在jenkins shell脚本中尝试:
对我有效!
kg7wmglp3#
我尝试了BUILD_ID的所有可能的组合,但都不起作用,我把“nohup命令〉output.txt&”放在jenkins的execute shell运行的shell脚本中,它完美地工作了!
gpfsuwkq4#
得到了同样的问题,补充说:
进入执行Shell -〉命令,在www.example.com中release.py有:
而且很有效
k5hmc34c5#
最简单的解决方案是使用“at now”而不是“nohup”
jenkins(execute shell)在你的工作中放入:
e3bfsja26#
对我有效的是将 *nohup java -jar... * 命令 Package 到execute shell命令内的sh文件中,并在以下命令之后运行同一个sh文件:
如果我有 *nohup java -jar... * 内联执行 shell 命令,那么它没有启动它从一些原因。我花了相当多的时间在这方面,希望它能帮助别人';)
tcbh2hod7#
最简单的方法:
'nohup java -jar [jar_name].jar〉您想要的日志文件2〉另一个文件'&
vx6bjr1n8#