从Hudson“执行shell”启动Java时,构建将无法完成

时间:2010-05-12 11:47:15

标签: unix shell hudson

作为部署应用程序的一部分,我使用Hudson在远程发布服务器上启动构建的应用程序。这是通过使用“执行shell”选项指定后期构建步骤来完成的。

我将deploy.sh脚本复制到远程服务器并通过ssh执行它,例如

scp /opt/myapp/deploy.sh myapp@myserver:/export/home/myapp/scripts/
ssh myapp@myserver "/export/home/myapp/scripts/deploy.sh"

deploy.sh 脚本启动一个java应用程序,然后将PID写入文件,例如

java -jar /opt/myapp/myapp.jar > /opt/myapp/myapp.log &
echo $! > /var/run/myapp/myapp.pid

(注意:此前有一些步骤 - 例如解压缩部署包)

奇怪的是,当我运行Hudson构建时,它似乎在通过SSH执行deploy.sh脚本后挂起。 java应用程序启动并将正确的PID写入文件。似乎Hudson无法检测到脚本已经完成。如果我拿出Java启动步骤,它就没有问题。

有人能看到我错过的吗?

谢谢,

安德鲁

1 个答案:

答案 0 :(得分:1)

从SSH会话启动后台进程时,需要重定向所有后台进程的I / O.否则,退出时SSH will hang

因此,请将您的java启动命令更改为:

java -jar /opt/myapp/myapp.jar > /opt/myapp/myapp.log 2>&1 < /dev/null &