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

标签 java linux bash ssh

我目前正在为运行 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/

相关文章:

java - 在 Eclipse 中克隆 git 存储库

linux - Debian apache2 溢出

python - 运行 python 脚本的 Bash 脚本

linux - Grep 一件事然后从下面的行中删除

git - 是否可以通过命令行删除 Github 上的远程存储库?

java - Ant 警告 : "' includeantruntime' was not set"

java - Android OpenCV 相机示例只是显示黑屏

java - 构建一次并部署到多个环境

c - stdin 在 Linux 中是否被视为字符设备?

Bash:使用 FTP 检查远程目录是否存在