Answers:
您已经找到了正确的方法,在这里找到文档。
注意:您可以通过在末尾加上&来将ssh(客户端)置于后台,但是您不会看到输出。如果确实要执行此操作,则将stdout / stderr重定向到文件,以防您需要检查远程主机的响应。
基本上,您可以通过以下两种方式进行操作:
ssh user@host "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"
要么
ssh user@host "$(nohup command1 > /dev/null 2>&1 &) && nohup command2 >> /path/to/log 2>&1 &"
注意:
&&
在执行第二个命令之前,要求第一个命令返回0
ssh user@host << EOF
nohup command1 > /dev/null 2>&1 &
nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF
以上3个选项应该适合您。
另外,在这里看看答案:https : //askubuntu.com/a/348921/70270
> /dev/null 2>&1
是通过重定向到黑洞大声笑来丢弃任何stdout / stderr输出
nohup command2 >> /path/to/command2.log 2>&1 &
在终端中一样简单地启动命令然后关闭终端,则该过程丢失了是否正确?
ssh node "nohup sleep 10 &"
不在守护程序模式下运行,保持ssh会话连接。即使您使用了nohup,SSH会话也将在10秒内返回。
原因是远程stdout和stderr仍连接到您的会话。它使ssh会话保持活动状态,nohup没有帮助。
这个:
ssh node "nohup sleep 10 1>/dev/null 2>/dev/null &"
立即返回。它确实使用nohup启动远程进程并立即退出ssh会话。
缩写形式:
ssh host "(command 1; command 2; ...) &>/dev/null &"
看来,bash本身会执行与终端的分离,因此不需要nohup。我运行Ubuntu 14.04 x86_64,bash 4.3.11。
nohup;
只是输出有关缺少参数的投诉。
command 1; command 2; ...
代表脚本OP要运行。OP也可以使用此答案的特殊情况:ssh myserver ./start.sh &>/dev/null &
> /dev/null
。