
Мне нужно загрузить данные между двумя машинами 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 утра, потенциально на час позже, чем вы ожидаете.
Исправьте значения вверх/вниз, чтобы они соответствовали вашим предпочтительным ограничениям пропускной способности. Они указаны в КБ (килобайтах) в секунду, поэтому вам нужно будет скорректировать их с помощью соответствующего коэффициента 10 для преобразования из более типичных скоростей интернет-подключения в Мб. Обратите внимание, что 1 Мб/с = 1000 Кб/с = 100 КБ/с.
--time-limit
Если на вашем компьютере нет такой опции rsync
, вы можете сделать то же самое с помощью timeout
утилиты.
timeout 60m trickle ... rsync ...