无法从jenkins运行nohup命令作为后台进程

Uts*_*pta 5 java unix linux nohup jenkins

更新:根据下面的讨论,我对答案进行了编辑,以获得更准确的描述。

我正在尝试从jenkins运行nohup命令。完整的命令是

nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

该命令不起作用。我可以在jenkins中将状态视为成功,但在Linux中则看不到Java进程。当我做ps -ef | grep java'

但是,当我删除最后一个'&'时,我将其更改为从forground而不是背景运行

它开始工作。我可以看到Java进程已启动。

如果我在linux控制台上运行原始命令,则该命令运行良好。

我需要从jenkins以原始形式运行它,作为backgorund进程。这样它就独立于詹金斯。

任何线索为什么会这样?

jpy*_*ams 9

长话短说,一旦作业完成,詹金斯就会杀死该作业产生的所有进程。要覆盖此行为,您需要设置一个环境变量。

该变量似乎因工作类型而异。过去是这样BUILD_ID,但对于管道作业来说是这样,并且这个答案JENKINS_NODE_COOKIE中还提到了其他几个。

因此,如果您在 Pipeline 中运行命令,它将如下所示:

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &'
Run Code Online (Sandbox Code Playgroud)

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


小智 5

在您的 jenkins shell 脚本中尝试:

  export BUILD_ID=dontKillMe
  nohup java -jar your_java_app.jar &
Run Code Online (Sandbox Code Playgroud)

它对我有用!


Mic*_*u93 0

遇到同样的问题,补充一下:

BUILD_ID=dontKillMe python /var/lib/jenkins/release.py
Run Code Online (Sandbox Code Playgroud)

进入 Execute Shell -> Command 并在release.py中有:

os.system('nohup java -jar ' + new_jars_on_server + '/' + generated_jar_by_mvn_name + '&')
Run Code Online (Sandbox Code Playgroud)

它有效