如何调用shell脚本来启动后端Java进程?

时间:2015-02-04 11:14:52

标签: jenkins

完成Jenkins任务后,我使用Jenkins的后置条件配置部分执行Linux shell脚本。

这个Linux shell脚本想要在后端启动备用服务,不能导致Jenkins暂停。

我尝试使用“nohup +&”等,但它不起作用。

有没有好办法呢?

2 个答案:

答案 0 :(得分:3)

詹金斯可能正在等待一些管道关闭。您的后台进程已经继承了一些文件描述符,并且只要它运行就会保持打开状态。

如果幸运的话,唯一的文件描述符是0,1和2(标准的。)您可能想要使用lsof -p PID检查后台进程的文件描述符,其中PID是进程ID后台流程。

您应确保所有这些文件描述符(包括输入和输出)都被重定向到后台进程,因此请使用以下内容启动它:

nohup daemon </dev/null >/dev/null 2>&1 &

可以将输出定向到/dev/null以外的文件,但请确保保留重定向的顺序。订单很重要。

如果您计划从Jenkins作业启动后台进程,请注意Jenkins将在构建结束时终止后台进程。有关如何防止这种情况,请参阅https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

答案 1 :(得分:1)

我在从Jenkins运行shell脚本作为后台进程时遇到了类似的问题。我使用以下命令修复它:

BUILD_ID=dontKillMe nohup ./start-fitnesse.sh &