Meus backups estão todos reunidos

Meus backups estão todos reunidos

Tenho um cron job que executa um comando rsync que faz um backup remoto a cada duas horas.

Caso o backup remoto anterior ainda esteja em execução, encapsulei este comando rysnc dentro de um comando rebanho.

Flock impede que este comando seja executado várias vezes simultaneamente:

flock -n /location/of/lock_file -c 'rsync -rv /home/localuser/ [email protected]:/home/remoteuser/backupFolder'  || echo "Couldn't perform remote backup, because previous remote backup is still in progress."

No entanto, se eu reiniciar o servidor remoto durante um desses backups (para simular um cenário de conexão interrompida), o rebanho continuará bloqueando tentativas futuras porque o processo anterior (embora permanentemente desconectado do destino do backup) persiste.

Qual é a melhor maneira de fazer o rebanho saber que o rsync falhou indefinidamente e, portanto, liberar esses bloqueios que estão impedindo o início de tentativas futuras?

Na página de manual do rsync, vejo que há um argumento --timeout. Definir essa é a melhor maneira de lidar com as fechaduras do rebanho 24 horas por dia?

Responder1

Isso não responde à sua pergunta, flockmas pode ajudar de qualquer maneira. Houve uma pergunta semelhante sobre estratégias de backup há algum tempo e gosteiminha respostao suficiente para implementá-lo sozinho.

A ideia básica é fazer com que seu script de backup crie um arquivo no destino do backup quando terminar e exclua o arquivo assim que começar a ser executado. Em seguida, você faz seu script testar a existência do arquivo e só permite que ele seja executado se o arquivo existir:

#!/usr/bin/env bash

## Make sure no backup is currently running
if [ ! -e /path/to/backup/backup_finished.txt ]; then 
  echo "A backup seems to be running, or did not finish correctly, exiting." && 
  exit;
fi
## Delete the file from the remote server
ssh user@remote rm /path/to/backup/backup_finished.txt

## Do da rsync 
rsync /path/to/source/ user@remote:/path/to/daily/backup/

## Create the file on the remote server
ssh user@remote touch /path/to/backup/backup_finished.txt

Esta é uma abordagem muito mais simplista que a sua, mas tem a vantagem de poder capturar (embora não lidar de maneira elegante) backups inacabados. Você pode expandir isso para testar se um backup está realmente em execução ou se um antigo não saiu corretamente e reagir de acordo.

Como você precisa monitorar processos nas máquinas locais e remotas, não creio que um sistema de arquivos de bloqueio funcione.

informação relacionada