我需要通过不稳定的连接在两台 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 ...