Ajuste a taxa máxima de download do rsync durante a execução

Ajuste a taxa máxima de download do rsync durante a execução

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 rsynctêm uma --time-limit=MINSopçã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 tricklepara gerenciar a velocidade da conexão e forçar uma reinicialização a rsynccada 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á rsyncpor 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-limitopção no seu rsync, poderá fazer praticamente a mesma coisa com o timeoututilitário.

timeout 60m trickle ... rsync ...

informação relacionada