【问题标题】:Run jar on remote machine as background process over ssh在远程机器上运行 jar 作为 ssh 的后台进程
【发布时间】:2020-05-17 04:58:14
【问题描述】:

我想通过 ssh 连接在远程机器上运行一个 jar 作为后台进程。远程机器上有bash脚本来执行jar

#!/bin/sh
export JAVA_HOME=/location/of/java/
export PATH=$JAVA_HOME/bin:$PATH
nohup java -jar jar_name.jar config.properties &

如果我直接从远程机器(sudo ./start_script.sh)执行上述脚本,jar 会作为后台进程启动,stdout 会被定向到与 jar 相同的文件夹中的nohup.out。但是当我从本地机器运行脚本时:ssh vm_name 'sudo ./start_script.sh',进程启动。但它阻塞并且输出被定向到本地终端。

有没有办法做到这一点?

编辑:我需要以 root 身份运行脚本并将参数传递给脚本,为 JAVA_HOME 添加占位符路径以避免混淆

【问题讨论】:

  • 为什么要使用 sudo?为什么要明确地将 JAVA_HOME 设置为空,然后在 PATH 中使用它?
  • @Paul jar 需要访问其他需要超级用户权限的资源。
  • 它要求输入密码吗?
  • 我正在为 JAVA_HOME 提供正确的位置,我只是在问题中省略了该细节,因为我认为这无关紧要。同样不,它不要求输入密码。
  • 尝试添加-t 选项:ssh vm_name -t 'sudo ./start_script.sh'

标签: java bash ssh


【解决方案1】:

【讨论】:

  • 不起作用。输出仍然定向到本地终端。另一个问题是进程以没有root权限的用户身份运行
【解决方案2】:

您需要告诉ssh 作为终端进行连接。

ssh vm_name -t 'sudo ./start_script.sh'

它很可能意识到你没有作为终端机并相应地改变行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多