我目前正在为运行 ubuntu 的虚拟机开发一个简单的部署脚本。 所有这些机器都应该运行以 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 应用程序不能作为后台进程正常运行吗?
最佳答案
将 & 移至行尾
#!/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
关于java - 通过 ssh 将 java 应用程序作为后台进程运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507940/