Назад | Перейти на главную страницу

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

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

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

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

Даже если вы можете сделать свое РУЧНОЕ решение, у него есть много недостатков:

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

Лучший системный администратор - тот, кто все автоматизирует и расслабляется.

Я думаю, что откровенный ответ - лучший, но для того, чтобы сделать то, что вы описываете, у вас может быть cronjob: вы делаете резервную копию каждую пятницу, а затем используете ротацию журнала, чтобы сохранить последние четыре копии. Или поищите любую резервную копию старше четырех недель.

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

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

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

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

и

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

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

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

    rm $ backupfile tar czvf $ backupfile / связка / из / каталогов

Или просто используйте суффикс имени файла с датой на нем:

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

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

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

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

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

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

или:

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

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