作为部署应用程序的一部分,我使用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启动步骤,它就没有问题。
有人能看到我错过的吗?
谢谢,
安德鲁
答案 0 :(得分:1)
从SSH会话启动后台进程时,需要重定向所有后台进程的I / O.否则,退出时SSH will hang。
因此,请将您的java启动命令更改为:
java -jar /opt/myapp/myapp.jar > /opt/myapp/myapp.log 2>&1 < /dev/null &