運行時調整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 ...

相關內容