
我需要透過不穩定的連接在兩台 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 ...