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

我想在运行它的远程服务器上执行一个脚本start.sh

 nohup node server.js & 

天真地,我这样称呼SSH:

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

这将启动脚本,但会话将保持连接状态。 我想在脚本中使用其他命令执行此步骤,这样做并不好。

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

你已经找到了正确的方法,这里是文件。

注意 :您可以通过在末尾放置一个&而将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

为什么不只是tmux或屏幕并完成它? 例如:

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

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

缩短forms:

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

看来,bash本身会执行从终端分离,所以不需要nohup。 我运行Ubuntu 14.04 x86_64,bash 4.3.11。