通过 SSH 执行长命令后继续脚本

Continuing script after long command executed over SSH

我的 local 计算机正在 运行ning 一个 bash 脚本,该脚本在 remote 上执行另一个脚本(本地),如下所示:

#!/bin/bash
# do stuff
ssh remote@remote "/home/remote/path/to/script.sh"
echo "Done"
# do other stuff

script.sh 执行大约需要 15 分钟。 没有丢失连接script.sh被完全执行(直到最后一行)。但是,Done 永远不会被回显other stuff 也不会被执行)。

备注:

编辑: script.sh 用于测试:

#!/bin/bash
touch /tmp/start
echo "Start..." & sleep 900; touch /tmp/endofscript

您是否尝试过在脚本中设置 set -xv,或者使用 bash -xv script.sh 执行这两个脚本以获取脚本执行的详细信息?

添加 -o ServerAliveInterval=60 解决了这个问题。

The ServerAliveInterval option prevents your router from thinking the SSH connection is idle by sending packets over the network between your device and the destination server every 60 seconds. (source)

对于需要几分钟执行且没有输出的脚本,这将使连接保持活动状态并避免超时和挂起。

两个选项:

  • ssh -o ServerAliveInterval=60 remote@remote "/home/remote/path/to/script.sh"
  • 将以下行添加到 local 计算机的 ~/.ssh/config(将 remote 替换为您的遥控器名称或 * 以启用任何遥控器):
    Host remote
        ServerAliveInterval 60
    

更多信息: