Действия
Ротация архивов по расписанию¶
Идея¶
Идея в том, чтобы удалять архивы старше 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 изменени(я, ий)