运行时调整rsync的最大下载速率

运行时调整rsync的最大下载速率

我需要通过不稳定的连接在两台 Linux 机器之间下载。 Rsync 似乎是最好的工具,但问题是,我想在夜间增加此过程的带宽速率限制。我怎样才能做到这一点?

关于如何做到这一点有什么好的建议吗?在我看来,最好的想法是拥有一个 bash 脚本,该脚本在特定时间被终止,然后使用检查时间并调整速度限制的脚本重新启动。

我们可以假设有很多rsync一直在运行,所以killall rsync将不起作用。

答案1

最新版本rsync有一个--time-limit=MINS选项。你说连接不稳定,所以无论如何你都需要绕一圈。我的建议是用于trickle管理连接速度并强制rsync每小时重新启动,无论其状态如何。

#!/bin/bash
#
while :
do
    # Evening? Or day?
    time=$(date +%H%M)
    if [[ ${hour#0} -gt 2200 || ${hour#0} -lt 700 ]]
    then
        # After 10pm and before 7am
        up=100 down=10    # 100 KB/s up and 10 KB/s down
    else
        up=10 down=1      # 10 KB/s up and 1 KB/s down
    fi

    trickle -s -u $up -d $down -t 10 rsync -avzP --time-limit=60 /path/to/source/ remote:/path/to/destination/ && break

    # Take a breather
    sleep 60
done

请记住,在此示例中,如果在 06:59 重新检查时间,则小时仍为 6,因此仍会rsync全速重新启动一个小时。实际上,这将让它使用更大的带宽直到早上 8 点,可能比您预期的晚一个小时。

修复上/下值以匹配您首选的带宽限制。它们以 KB(千字节)每秒为单位,因此您需要按适当的系数 10 进行调整,以从更典型的 Internet 连接速度(以 Mb 为单位)进行转换。请注意,1 Mb/s = 1000 Kb/s = 100 KB/s。

--time-limit如果您的 上没有该选项rsync,则可以使用该timeout实用程序执行几乎相同的操作。

timeout 60m trickle ... rsync ...

相关内容