强制 rsync 在连接停滞时超时

强制 rsync 在连接停滞时超时

我遇到了一个问题,那就是我从一个有缺陷的循环数据移动器节点 rsync 数据。其中一个节点不断断开与我的数据来源文件系统的数据连接,需要重新连接,这可能需要几分钟的时间。在此期间,该特定文件的 rsync 不会中止,只是挂起,最多几分钟,直到下载继续。因为这是对时间至关重要的数据,所以这不是一个可行的选择,而应该在连接停滞时尽快断开连接,然后重新连接(无论如何,这将被负载平衡到下一个节点)。

有人能想到一种方法来告诉 rsync 中止已停滞超过 20 秒的传输吗?

损坏的数据移动节点的操作员对这个问题的反应很慢,他们意识到了这个问题,但目前没有采取任何措施,所以我需要在我的终端找到解决方案。

我尝试使用--timeout选项,但当数据连接停滞时它似乎不起作用。

答案1

文件传输停滞后,您可以运行 rsync 并--timeout=SECONDS退出。较新版本的 rsync 具有--contimeout=SECONDS连接超时功能。

# timeout after 20 seconds
rsync --timeout=20 source destination

# timeout after 3 seconds of no connectivity
rsync --contimeout=3 source destination

更多有用的例子: https://explainshell.com/explain?cmd=rsync+--timeout%3D60+-aP+--append-verify+--stats+user%40host%3A%2Ffolder+%2Fcygdrive%2Ff%2Fbackup

答案2

如果你知道每次 rsync 运行的最大持续时间,你可以使用timeout

$ timeout 120 /usr/bin/rsync <options>

答案3

您使用的是哪种 rsync 传输?如果是 SSH,那么您可能能够将配置选项传递给 SSH 以帮助您超时连接。我没有好的方法来测试,但也许ServerAliveIntervalTCPKeepAlive选项可能会满足您的需求?

相关内容