rsync 和 Ubuntu 18.10 的 ssh 超时

rsync 和 Ubuntu 18.10 的 ssh 超时

我使用 rsync 命令经历了这种奇怪的行为:

sudo rsync --timeout=300 --compress-level=9 -aHe "ssh -o ConnectTimeout=200 -o ServerAliveInterval=2 -ServerAliveCountMax=200" --progress --delete -z /media/Restic/* [email protected]:/DataVolume/BACKUPS/T4-Ubuntu-Restic

几分钟后,我收到错误

rsync: [sender] write error: Broken pipe (32)

我在第二个终端窗口中测试了另一个并发 ssh 会话,运行 ping 到网关,即使 rsync 中断,它也会继续运行,只是在 rsync 中断时暂停一段时间。在我看来,Ubuntu 会终止连接一两秒,然后恢复。

我想知道为什么 rsync 上的 ssh 立即报告管道损坏,而不等待我在命令中设置的超时 200 或 300。

答案1

--bwlimit=4096 选项为我解决了这个问题

答案2

--timeout选项用于处理遥控器rsync挂起或不可用的情况。它的意思是 ”在放弃远程连接之前等待这么多秒”。

如果连接被强制关闭,就像您的场景一样,则不再有任何连接,并且rsync无法再与其对等方通信。由于它现在可以保证永远不会收到其对等方的消息,因此它会放弃并立即向您报告错误。

理想情况下,您应该调查为什么您的服务器不加区别地关闭连接。与此同时,在传输过程中设置一个循环可能会有所帮助

while :
do
    rsync ... /media/Restic/ [email protected]:/DataVolume/BACKUPS/T4-Ubuntu-Restic &&
        break
    ss=$?

    [[ -t 2 ]] && echo "Rsync failed with status $ss; retrying..." >&2
    sleep 60
done

相关内容