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

Cron-работа «если-если» структура?

Я хотел бы настроить эту процедуру резервного копирования базы данных с помощью 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" )