Я хочу делать резервную копию каждую пятницу вечером (нет, это не вся процедура резервного копирования, а лишь ее часть). Резервная копия каждой пятничной ночи будет перезаписана только через 4 недели. Итак, по сути, у меня есть четыре возобновляемых резервных копии: неделя 1, неделя 2, неделя 3 и неделя 4.
Теперь мне нужно, чтобы сценарий резервного копирования на 1 неделю запускался каждые 4 недели. Но я также хочу, чтобы сценарий week2 запускался каждые четыре недели. Я знаю, что могу указать crontab выполнять что-то каждые X недель / дней / часов / чего угодно. Однако как мне настроить его так, чтобы каждый из этих четырех сценариев действительно запускался в разные недели, как мне избежать запуска всех 4 сценариев в одну ночь, а затем послушно ждать недели только для все снова бежать?
вместо того, чтобы разрабатывать такие сложные процедуры резервного копирования, подумайте об использовании Bacula, бесплатного программного обеспечения с открытым исходным кодом корпоративного класса. Bacula очень гибкая и может автоматизировать резервное копирование практически всеми возможными способами.
Даже если вы можете сделать свое РУЧНОЕ решение, у него есть много недостатков:
Лучший системный администратор - тот, кто все автоматизирует и расслабляется.
Я думаю, что откровенный ответ - лучший, но для того, чтобы сделать то, что вы описываете, у вас может быть cronjob: вы делаете резервную копию каждую пятницу, а затем используете ротацию журнала, чтобы сохранить последние четыре копии. Или поищите любую резервную копию старше четырех недель.
Одна альтернатива: усложните свой скрипт, поскольку он лучше справляется с такой сложностью, чем cron. Итак (при условии bash):
(глупая проблема с форматированием, здесь нужно поместить фиктивный текст)
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 такой сложностью. Обработайте это в сценарии, который, вероятно, лучше справится со сложностью.
Две альтернативы:
или:
Именно такое понимание того, почему Весело поскольку вы делаете все самостоятельно, вы в конечном итоге продвинетесь вперед, используя подходящий инструмент резервного копирования, такой как amanda или bacula как Фрэнк предлагает.