Mis copias de seguridad están todas agrupadas

Mis copias de seguridad están todas agrupadas

Tengo un trabajo cron que ejecuta un comando rsync que realiza una copia de seguridad remota cada dos horas.

En el caso de que la copia de seguridad remota anterior todavía se esté ejecutando, encapsulé este comando rysnc dentro de un comando de grey.

Flock evita que este comando se ejecute varias veces simultáneamente:

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."

Sin embargo, si reinicio el servidor remoto durante una de estas copias de seguridad (para simular un escenario de conexión rota), Flock continúa bloqueando intentos futuros porque el proceso anterior (aunque desconectado permanentemente del destino de la copia de seguridad) persiste.

¿Cuál es la mejor manera de hacerle saber a Flock que rsync ha fallado indefinidamente y, por lo tanto, liberar estos bloqueos que impiden que se inicien futuros intentos?

En la página de manual de rsync, veo que hay un argumento --timeout. ¿Establecer esa es la mejor manera de lidiar con los bloqueos permanentes del rebaño?

Respuesta1

Esto no responde a su pregunta, flockpero podría ayudar de todos modos. Hubo una pregunta similar sobre estrategias de respaldo hace un tiempo y me gustómi respuestasuficiente para implementarlo yo mismo.

La idea básica es que su secuencia de comandos de respaldo cree un archivo en el destino de la copia de seguridad cuando finalice y elimine el archivo tan pronto como comience a ejecutarse. Luego, hace que su script pruebe la existencia del archivo y solo permite que se ejecute si el archivo existe:

#!/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

Este es un enfoque mucho más simplista que el suyo, pero tiene la ventaja de que puedo detectar (aunque no manejar de manera elegante) copias de seguridad no terminadas. Puede ampliar esto para probar si realmente se está ejecutando una copia de seguridad o si una anterior no salió limpiamente y reaccionar en consecuencia.

Dado que necesita monitorear procesos tanto en la máquina local como en la remota, no creo que un sistema de archivos de bloqueo funcione.

información relacionada