Retomar o rsync por SSH após uma conexão interrompida?

45

Eu tenho que transferir grandes quantidades de dados (> 80 GB) sobre o ssh usando o rsync. Tudo está funcionando bem, mas a conexão DSL da qual os dados de backup são enviados cairá uma vez a cada 24h por até 3 minutos (não é uma opção optar por provedores de comutação).

Como faço para:

  1. Reinicie a transferência automaticamente quando a conexão estiver em backup?

  2. Certifique-se de que não há por acaso dois comandos rsync sendo executados ao mesmo tempo?

por Sathya 27.06.2011 / 13:24

4 respostas

48

Os seguintes itens devem ser úteis:

#!/bin/bash

while [ 1 ]
do
    rsync -avz --partial source dest
    if [ "$?" = "0" ] ; then
        echo "rsync completed normally"
        exit
    else
        echo "Rsync failure. Backing off and retrying..."
        sleep 180
    fi
done

Quando a conexão morrer, o rsync será encerrado com um código de saída diferente de zero. Esse script simplesmente executa novamente o rsync, permitindo que continue até que a sincronização seja concluída normalmente.

    
por 27.06.2011 / 13:27
6

Isso faz exatamente o mesmo que a resposta de Peter, mas dá ao usuário a opção de qual arquivo remoto ele quer, e onde ele deseja salvá-lo (assim como conduzir o rsync sobre o ssh). Substitua o USER e HOST pelo seu nome de usuário e host, respectivamente.

#!/bin/bash
echo -e "Please enter the full (escaped) file path:"
read -r path
echo "Path: $path"
echo -e "Enter the destination:"
read -r dst
echo "Destination: $dst"
while [ 1 ]
do
    rsync --progress --partial --append -vz -e ssh "USER@HOST:$path" $dst
    if [ "$?" = "0" ] ; then
        echo "rsync completed normally"
        exit
    else
        echo "rsync failure. Retrying in a minute..."
        sleep 60
    fi
done

As opções de rsync usadas aqui ativam as estatísticas de progresso durante a transferência, o salvamento de arquivos parciais em caso de falha inesperada e a capacidade de anexar arquivos parcialmente concluídos ao reiniciar. A opção -v aumenta a verbosidade, a opção -z ativa a compactação (boa para uma conexão lenta, mas requer mais poder de CPU em ambas as extremidades), e a opção -e nos permite conduzir essa transferência sobre o ssh (a criptografia é sempre boa).

Nota: Use isto somente se você tiver o login de chave pública habilitado com o seu ssh, caso contrário, ele pedirá uma senha quando ela for reiniciada (matando todas as funcionalidades do script).

    
por 18.11.2013 / 06:25
4
O

supervisor daemon (um gerenciador de controle de processos) poderia funcionar muito bem depois de criar certificados rsa de ambos os lados, com uma configuração semelhante à seguinte: (/ etc / supervisor / O supervisord.conf é o caminho do arquivo de configuração nos sistemas baseados no debian)

[program:rsync-remoteserver]
command=rsync -avz --progress [email protected]:/destination /backup-path
stdout_logfile=/out-log-path  
stderr_logfile=/errlogpath
    
por 17.09.2012 / 08:53
1

A resposta do @ Peter parece ser muito útil, mas para mim foi importante usar a opção --update . Depois que a conexão foi retomada, sem --update rsync estava tentando sincronizar tudo desde o início. Com --update , arquivos que já existem são ignorados.

rsync --partial --update --progress -r [SOURCE] [DESTINATION]

    
por 02.10.2017 / 08:45