
Preciso fazer download entre duas máquinas Linux em uma conexão instável. O Rsync parece ser a melhor ferramenta, mas o problema é que quero aumentar o limite da taxa de largura de banda nesse processo durante a noite. Como eu posso fazer isso?
Alguma boa sugestão sobre como fazer isso? A melhor ideia me parece ser ter um script bash que seja eliminado em horários específicos e depois reiniciado com um script que verifique a hora e ajuste o limite de velocidade.
Podemos assumir que há muitos rsyncs em execução o tempo todo, então killall rsync não funcionará.
Responder1
Versões recentes rsync
têm uma --time-limit=MINS
opção. Você diz que a conexão está instável, então você precisará fazer um loop de qualquer maneira. Minha sugestão seria usar trickle
para gerenciar a velocidade da conexão e forçar uma reinicialização a rsync
cada hora independente de seu estado.
#!/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
Lembre-se que neste exemplo, se a hora for verificada novamente às 06h59, a hora ainda será 6, portanto ele ainda reiniciará rsync
por uma hora em velocidade máxima. Efetivamente, isso permitirá que ele use sua largura de banda maior até as 8h, potencialmente uma hora depois do esperado.
Corrija os valores para cima/para baixo para corresponder às suas restrições de largura de banda preferidas. Eles estão em KB (kilobytes) por segundo, então você precisará ajustar pelo fator apropriado de 10 para converter as velocidades de conexão de Internet mais típicas em Mb. Observe que 1 Mb/s = 1.000 Kb/s = 100 KB/s.
Se você não tiver a --time-limit
opção no seu rsync
, poderá fazer praticamente a mesma coisa com o timeout
utilitário.
timeout 60m trickle ... rsync ...