通过ssh运行java应用程序作为后台进程

时间:2014-12-16 15:22:54

标签: java linux bash ssh

我正在为运行ubuntu的vms开发一个简单的部署脚本。 所有这些机器都应该运行一个以jar形式提供的java应用程序。

这是安装java的脚本的相关部分,将jar从本地计算机复制到远程计算机,然后启动应用程序:

ssh ubuntu@$line -i ~/.ssh/key.pem -o StrictHostKeyChecking=no <java_installation.sh
scp -i ~/.ssh/key.pem $JARFILE ubuntu@$line:~/storagenode.jar
ssh ubuntu@$line -i ~/.ssh/key.pem <java_start_jar.sh

通过java_installation.sh脚本安装成功,scp命令也可以。 尝试通过ssh在java_start_jar.sh中执行命令时会发生此问题。 java_start_jar.sh:

#!/bin/sh
# this script starts a jar file and creates a shellscript which can be used to stop the execution.
nohup java -jar ~/storagenode.jar & > ~/storagenode.log
pId=$!
echo "kill $pId" > ~/stop_storagenode.sh
chmod u+x ~/stop_storagenode.sh

脚本开始执行.jar文件,但随后只是阻塞。 Ssh不返回,其余的本地代码仅在手动关闭连接后执行。 有什么想法为什么java应用程序没有正确运行作为后台进程?

1 个答案:

答案 0 :(得分:2)

移动&amp;到行尾

#!/bin/sh
# this script starts a jar file and creates a shellscript which can be used to stop the execution.
nohup java -jar ~/storagenode.jar > ~/storagenode.log &
pId=$!
echo "kill $pId" > ~/stop_storagenode.sh
chmod u+x ~/stop_storagenode.sh