【问题标题】:can't see nohup command's output when used with ssh与 ssh 一起使用时看不到 nohup 命令的输出
【发布时间】:2026-01-21 16:15:01
【问题描述】:

我正在尝试将 jar 运行到不同的服务器上。因此,在我当前的脚本中,我在该服务器上执行 ssh,然后使用 nohup 运行 jar。但是,没有在新服务器上创建 nohup.out。所以,我无法捕捉到错误。

如果我手动登录到该服务器然后启动 jar,则创建 nohup.out。有人可以帮忙吗?

以下是我在脚本中编写的命令:

sshpass -p $node_pwd ssh -n root@$node "sh -c 'cd mydir;nohup java -jar NodeStarter.jar config.properties > /dev/null 2>&1 &'"

这里,node 是我正在登录的服务器。 node_pwd 是包含该服务器密码的变量。

【问题讨论】:

    标签: linux unix nohup


    【解决方案1】:
    nohup java -jar blah.jar > /dev/null 2>&1 
    

    在本例中,您将输出从 stderr 重定向到 stdout,但您已经将输出从 stdout 重定向到 /dev/null。

    结果是您将 stdout 和 stderr 都通过管道传输到 /dev/null

    只有在还没有被重定向的情况下才会输出到 nohup.out。

    从 shell 运行命令时,您可能没有使用相同的重定向参数。

    【讨论】:

    • 我尝试运行命令而不将输出重定向到 /dev/null,但仍然没有创建 nohup.out。
    • 也许它写到你主目录中的 nohup.out 而不是 mydir,而你正在寻找 mydir?如果标准输出不是终端,至少某些版本的 nohup 会在 $HOME 中使用 nohup.out。
    • 我为 nohup 运行了一个 find 命令在每个目录中搜索它,但我找不到它。但是,如果我通过登录到该特定服务器手动运行 jar,则会创建 nohup.out。发生这种情况的任何原因?