Проект

Общее

Профиль

Действия

Ротация архивов по расписанию

Идея

Идея в том, чтобы удалять архивы старше 3 дней с момента последнего успешного резервного копирования.
Дату последнего резервного копирования берем, как дату изменения файла отчета о резервном копировании backup-report.file

У нас резервное копирование выполняет capabox. Свой отчет он создает в /var/tmp/capabox-pgsql-srvdb.position

Команда очистки архивов выглядит так:

pg_cleanup_backedup_archive.sh /srv/db/pgsql/9.2/pg_archive /var/tmp/capabox-pgsql-srvdb.position

Сам скрипт

pg_cleanup_backedup_archives.sh

#!/bin/bash

DAYS_BEFORE_LAST_BACKUP=3

if [ -z "${2}" ]; then
  echo "USEAGE: ${0##*/} /path/to/pg_archive backup-report.file" >&2
  exit 1
fi

PG_ARCHIVE_DIRECTORY="${1}" 
BACKUP_REPORT_FILE="${2}" 

if [ ! -w "${PG_ARCHIVE_DIRECTORY}" ]; then
  echo "Archive directory '${PG_ARCHIVE_DIRECTORY}' is not writable" >&2
  exit 1
fi

if [ ! -e "${BACKUP_REPORT_FILE}" ]; then
  echo "File '${BACKUP_REPORT_FILE}' not found" >&2
  exit 1
fi

SEARCH_DAYS_AGO=$[($(date +'%s')-$(stat -c '%Y' "${BACKUP_REPORT_FILE}"))/24/3600+${DAYS_BEFORE_LAST_BACKUP}] || exit 1

OLD_BACKUPS=$(find "${PG_ARCHIVE_DIRECTORY}" -type f -name "*.backup" -mtime +"${SEARCH_DAYS_AGO}" -printf '%f\n') || exit 1

if [ -n "${OLD_BACKUPS}" ]; then
  pg_archivecleanup "${PG_ARCHIVE_DIRECTORY}" $(echo "${OLD_BACKUPS}" |sort | tail -n 1) || exit 1

  for NAME in ${OLD_BACKUPS}; do
    rm -f "${PG_ARCHIVE_DIRECTORY}/${NAME}" || exit 1
  done
fi

Обновлено Андрей Волков около 11 лет назад · 3 изменени(я, ий)