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

时间:2016-05-20 08:20:43

标签: java linux unix jenkins nohup

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

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

nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &

此命令不起作用。我可以在jenkins中看到状态为成功但在linux中没有java进程。当我做&ps; ps -ef | grep java'

然而,当我删除最后一个'&' ,就是我在forground而不是background

中运行它

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

原始命令工作正常如果我在linux控制台上运行它。

我需要以原始形式从jenkins运行它作为backgorund过程。所以它与詹金斯无关。

任何线索为什么会发生这种情况?

7 个答案:

答案 0 :(得分:0)

遇到同样的问题,补充道:

BUILD_ID=dontKillMe python /var/lib/jenkins/release.py

进入执行外壳 - >命令和内部release.py有:

os.system('nohup java -jar ' + new_jars_on_server + '/' + generated_jar_by_mvn_name + '&')

并且有效

答案 1 :(得分:0)

长话短说,Jenkins会在作业结束后杀死所有由作业产生的进程。要覆盖此行为,您需要设置环境变量。

变量似乎因作业类型而异。它曾经是BUILD_ID,但对于管道作业,它是JENKINS_NODE_COOKIEthis answer中提到了其他几个。

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

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &'

有关详细信息,请参阅the wiki on ProcessTreeKillerthis comment in the Jenkins Jira

答案 2 :(得分:0)

我尝试了使用BUILD_ID进行所有可能的组合,但没有成功。 我通过将“ nohup命令> output.txt&”放入jenkins中的execute shell运行的shell脚本中来使其变得更困难了!

答案 3 :(得分:0)

最好的简单解决方案是使用“现在”而不是“ nohup”

在您的工作中,詹金斯(执行shell)放置:

set +e #so "at now" will run even if java -jar fails
#Run java app in background
echo "java -jar $(ls | grep *.jar | head -n 1)" | at now + 1 min

答案 4 :(得分:0)

在您的jenkins shell脚本中尝试:

apply

对我有用!

答案 5 :(得分:0)

对我有用的是将 nohup java -jar ... 命令包装到execute shell命令中的sh文件中,并在之后立即运行相同的sh文件:

echo "starting java jar..."
cd [some location where jar is]
echo "nohup java -jar [jar_name].jar &" > start-jar-in-background.sh
sh start-jar-in-background.sh
echo "started java jar"

如果我在Execute shell命令中内联了 nohup java -jar ... ,则由于某些原因它没有启动它。我花了很多时间,希望对某人有帮助';)

答案 6 :(得分:0)

最简单的方法:

`nohup java -jar [jar_name] .jar> log_file_you_want 2> another_file`&