【问题标题】:Run java application as background process via ssh通过 ssh 将 java 应用程序作为后台进程运行
【发布时间】:2015-02-14 23:01:42
【问题描述】:

我目前正在为运行 ubuntu 的 vm 开发一个简单的部署脚本。 所有这些机器都应该运行作为 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 应用程序不能作为后台进程正确运行?

【问题讨论】:

    标签: java linux bash ssh


    【解决方案1】:

    将 & 移到行尾

    #!/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
    

    【讨论】:

    • 哇,这么简单,谢谢!我是 Shellscripts 的新手,请原谅 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2012-04-21
    • 2013-08-09
    • 2020-07-08
    相关资源
    最近更新 更多