Crontab — планирование резервного копирования

Crontab — планирование резервного копирования

Я хочу делать резервную копию каждую пятницу вечером (нет, это не вся процедура резервного копирования, а только ее часть). Резервная копия каждой пятницы вечером не будет перезаписана до тех пор, пока не пройдет 4 недели. Так что, по сути, у меня есть четыре возобновляемых резервных копии: неделя 1, неделя 2, неделя 3 и неделя 4.

Теперь мне нужно, чтобы скрипт резервного копирования week1 запускался каждые 4 недели. Но я также хочу, чтобы скрипт week2 запускался каждые четыре недели. Я знаю, что могу сказать crontab выполнять что-то каждые X недель/дней/часов/каждых дней. Однако как мне настроить его так, чтобы каждый из этих четырех скриптов на самом деле запускался в разные недели, как мне избежать запуска всех 4 скриптов в одну и ту же ночь, а затем послушно ждать недели только для того, чтобывсеснова бежать?

решение1

Вместо того, чтобы разрабатывать такие сложные процедуры резервного копирования, рассмотрите возможность использования Bacula, которая является бесплатным программным обеспечением с открытым исходным кодом класса Enterprise. Bacula очень гибкая и может автоматизировать задания резервного копирования практически любым возможным способом, который вам нужен.

Даже если вы способны реализовать свое решение ВРУЧНУЮ, у него есть много недостатков:

  • Отслеживание ошибок может стать большой проблемой
  • Отслеживание заданий было бы головной болью
  • ручная настройка всегда требует постоянного контроля

Лучший системный администратор — тот, кто все автоматизирует и отдыхает.

решение2

Я думаю, что ответ Фрэнка лучший, но чтобы сделать так, как вы описываете, вы можете сделать cronjob, который делает резервную копию каждую пятницу, а затем использовать log rotate, чтобы сохранить последние четыре копии. Или сделать find для поиска любой резервной копии старше четырех недель.

решение3

Один из вариантов: перенести сложность в ваш скрипт, поскольку он лучше справляется с такого рода сложностью, чем cron. Итак (предполагается, что bash):

  • Настройте cron-задание так, чтобы оно запускало один и тот же сценарий каждую пятницу.
  • Измените свой скрипт так, чтобы он давал остаток от деления на 4 от количества недель с начала эпохи:

(глупая проблема с форматированием, нужно вставить сюда фиктивный текст)

epochsecs=`date +%s`   # second since epoch

и

weeknum=`expr $epochsecs / 86400 / 7 % 4`  # weeks since epoch, modulo 4
  • Используйте этот номер как часть имени файла резервной копии.

    backupfile=/путь/к/файлу/резервной/копии.$номер_недели

  • Перезапишите старые файлы резервных копий.

    rm $backupfile tar czvf $backupfile /группа/каталогов

В качестве альтернативы можно просто использовать суффикс имени файла с указанием даты:

backupfile=/path/to/backup/file.`date +%Y-%m-%d`

затем запустите в своем скрипте команду find, которая удалит файлы резервных копий старше 28 дней:

find /path/to/backup -maxdepth 1 -ctime +28 -delete

В любом случае, не перегружайте cron такой сложностью. Решайте ее в скрипте, который, вероятно, лучше справится со сложностью.

решение4

Две альтернативы:

  • Запланируйте запуск скрипта на каждую пятницу, который отслеживает, какое задание было выполнено последним, и запускает следующее задание в последовательности.

или:

  • Запланируйте запуск первой недели с 1-го по 7-й день месяца и только по пятницам.
  • Запланируйте проведение второй недели с 8-го по 14-й день месяца и только по пятницам.
  • ... и так далее.
  • Вы заметите, что это не совсем дает вамидеальныйрезервное копирование - будут случаи, когда вы пропустите неделю резервного копирования (когда день 29/30/31 выпадает на пятницу)

Именно поэтому, насколько я понимаю,Весельетак как вам приходится делать все самостоятельно, вы в конечном итоге продвинетесь дальше, используя надлежащий инструмент резервного копирования, такой как Amanda или Bacula.Фрэнк предлагает.

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