Unix 建造原木';“从Hudson启动Java时无法完成”;执行shell";
作为应用程序部署的一部分,我使用Hudson在远程发布服务器上启动构建的应用程序。这是通过使用“executeshell”选项指定生成后步骤来完成的 我将deploy.sh脚本复制到远程服务器,并通过ssh执行它,例如Unix 建造原木';“从Hudson启动Java时无法完成”;执行shell";,unix,shell,hudson,Unix,Shell,Hudson,作为应用程序部署的一部分,我使用Hudson在远程发布服务器上启动构建的应用程序。这是通过使用“executeshell”选项指定生成后步骤来完成的 我将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脚本启动
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写入文件。哈德逊似乎无法检测到脚本已经完成。如果我执行Java启动步骤,就不会有任何问题
有人能看到我错过了什么吗
谢谢
Andrew从SSH会话启动后台进程时,需要重定向所有后台进程的I/O。否则,在退出时 因此,将java启动命令更改为:
java -jar /opt/myapp/myapp.jar > /opt/myapp/myapp.log 2>&1 < /dev/null &
java-jar/opt/myapp/myapp.jar>/opt/myapp/myapp.log 2>&1
您是否尝试过为Java流程制定nohup?这是一个很好的建议,但似乎不起作用。