Я хотел бы настроить эту процедуру резервного копирования базы данных с помощью cron:
База данных - это DB2, кому интересно. «Полный» означает полный, «инкрементный» означает накопительный инкрементный, а «инкрементная дельта» означает «не накопительный инкрементный». В худшем случае сценарий восстановления будет «полный + инкрементный + 6 дельт».
Вот что я пробовал:
# monthly
0 0 1 * * ("do full backup")
# weekly
0 0 2-31 * 0 ("do incremental backup")
# daily
0 0 2-31 * 1-6 ("do incremental delta backup")
... надеясь, что вторая строка будет означать «сделать резервную копию в воскресенье, но только если дата находится между 2-м и 31-м». Оказывается, cron не И ее аргументы времени, а ИЛИ их. Итак, в полночь между вторником 18-го и средой 19-го числа были запущены как ежедневное, так и еженедельное резервное копирование, даже если это не воскресенье. Между прочим, ежедневная «пришла первой» и заблокировала еженедельник.
Теперь я мог бы поиграть с таймингом так, чтобы в течение дня ежемесячное резервное копирование всегда начиналось перед еженедельным, начиналось перед ежедневным (например, в 00.01, 00.02 и 00.03), таким образом используя явление «блокировки» для достичь своей цели. Однако это уродливо, и время от времени мне приходилось иметь дело с выводом ошибок, который на самом деле не является ошибкой (заблокированная резервная копия).
Кроме того, я мог основывать свою схему исключительно на днях месяца. Но хост с полным резервным копированием требует больших затрат, поэтому мои пользователи действительно хотелось бы запустить полную резервную копию на выходных.
Есть предложения, не требующие написания сценариев? Я хотел бы оставить настройку очень простой для удобства использования и понимания в будущем. Более того, разные группы пользователей будут нуждаться в немного разных политиках резервного копирования, и я не люблю писать небольшие различия.
С уважением, Торстен
Как насчет этого:
# monthly
0 0 1 * * ("do full backup")
# weekly or daily
0 0 2-31 * * (if test `date +%u` -eq 7 then "do incremental backup" else "do incremental delta backup" )