通过SSH运行nohup命令,然后断开连接


46

我想start.sh在运行此脚本的远程服务器上执行脚本:

nohup node server.js &

天真的,我这样称呼SSH:

ssh myserver <<EOF
./start.sh &
EOF

这将启动脚本,但保持会话连接。我想跟脚本中的其他命令一起执行此步骤,所以这不好。

如何通过SSH到远程计算机,nohup在后台启动命令,然后断开连接?我想我可以将SSH进程本身放在后台,但这似乎不正确。

Answers:


40

您已经找到了正确的方法,在这里找到文档。

注意:您可以通过在末尾加上&来将ssh(客户端)置于后台,但是您不会看到输出。如果确实要执行此操作,则将stdout / stderr重定向到文件,以防您需要检查远程主机的响应。

基本上,您可以通过以下两种方式进行操作:

直接运行命令{,s}

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
史蒂夫·贝内特

不是真的,> /dev/null 2>&1是通过重定向到黑洞大声笑来丢弃任何stdout / stderr输出
Terry Wang

5
请注意,我建议使用>>而不是>来写入日志文件。否则,您只会从最后一次运行中得到错误。
Alexis Wilke 2013年

如果我像nohup command2 >> /path/to/command2.log 2>&1 &在终端中一样简单地启动命令然后关闭终端,则该过程丢失了是否正确?
路加福音

1
@TerryWang第二个示例不适用于与号和后跟双与号的情况,请参见unix.stackexchange.com/q/67006/86716
tsionyx 2016年

7

为什么不只是tmux或筛选并完成呢?例如:

$ tmux new -s SessionNameHere
$ nohup /path/to/your/script.sh

如果它会不断循环播放或需要一段时间才能完成,则此方法很实用。您可以断开与会话的连接,它将保持活动状态。


2
确实不符合我的要求,这是可以在笔记本电脑上运行的单个命令,它将连接,派生一个命令,然后断开连接。
史蒂夫·贝内特

3
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会话。


这正是我们的问题。我们只有一个1> file.log。一台机器上的SSH卡住了。“节点”计算机上的进程正在运行。当我们在关闭&之前添加2>&1时,ssh将断开连接。
Lee Meador

2

缩写形式:

ssh host "(command 1; command 2; ...) &>/dev/null &"

看来,bash本身会执行与终端的分离,因此不需要nohup。我运行Ubuntu 14.04 x86_64,bash 4.3.11。


1
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论。- 来自评论
David Foerster

这似乎不起作用。nohup; 只是输出有关缺少参数的投诉。
史蒂夫·本内特

@DavidFoerster,不知道为什么,如果command 1; command 2; ...代表脚本OP要运行。OP也可以使用此答案的特殊情况:ssh myserver ./start.sh &>/dev/null &
Alek_A 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.