通过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。