Все мои резервные копии сгруппированы

Все мои резервные копии сгруппированы

У меня есть задание cron, которое запускает команду rsync, которая делает удаленное резервное копирование каждые два часа.

На случай, если предыдущее удаленное резервное копирование все еще выполняется, я инкапсулировал эту команду rysnc внутри команды flock.

Flock предотвращает многократное одновременное выполнение этой команды:

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

Однако если я перезагружу удаленный сервер во время одного из таких резервных копий (чтобы имитировать ситуацию с разрывом соединения), Flock продолжит блокировать будущие попытки, поскольку предыдущий процесс (хотя и постоянно отключенный от места назначения резервной копии) сохраняется.

Каков наилучший способ сообщить Flock о том, что rsync не удалось выполнить, и, следовательно, снять блокировки, которые мешают запуску будущих попыток?

На странице руководства rsync я вижу аргумент --timeout. Является ли его установка лучшим способом справиться с круглосуточными блокировками flock?

решение1

Это не ответ на ваш вопрос, flockно может помочь, несмотря ни на что. Некоторое время назад был похожий вопрос о стратегиях резервного копирования, и мне понравилосьмой ответдостаточно, чтобы реализовать это самостоятельно.

Основная идея заключается в том, чтобы ваш скрипт резервного копирования создавал файл в месте назначения резервного копирования, когда он завершается, и удалял файл, как только он начинает выполняться. Затем вы заставляете свой скрипт проверять существование файла и разрешать ему выполняться только в том случае, если файл существует:

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

Это гораздо более упрощенный подход, чем ваш, но у него есть преимущество в том, что я могу поймать (хотя и не справиться с ними каким-либо изящным образом) незавершенные резервные копии. Вы можете расширить это, чтобы проверить, действительно ли выполняется резервная копия или старая не завершилась чисто, и отреагировать соответствующим образом.

Поскольку вам необходимо отслеживать процессы как на локальной, так и на удаленной машине, я не думаю, что система файлов блокировки будет работать.

Связанный контент