1

Я использую Rsnapshot для резервного копирования (Linux CentOS 6).

Вот мой /etc/cron.d/rsnapshot:

30 11 * * * root    /usr/bin/rsnapshot nowandthen > /backups/rsnapshot_cron.txt 2>&1
15 11 * * 4 root    /usr/bin/rsnapshot weekly > /backups/rsnapshot_cron.txt 2>&1
00 11 24-31 * 4 root    /usr/bin/rsnapshot monthly > /backups/rsnapshot_cron.txt 2>&1

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

Однако ежемесячное резервное копирование выполняется сегодня, в четверг, 2016-февраль-18 в 11:00. Сегодня не последний четверг месяца.

Что не так с моим crontab?

1 ответ1

3

Согласно этому сайту, ваша строка означает «В 11:00 24, 25, 26, 27, 28, 29, 30 и 31 числа каждого месяца и каждый четверг» (мой акцент). Если сайт правильный, это объясняет, почему он работал 18-го числа.

Пример записи в man 5 crontab для запуска во 2-ю субботу:

0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

(т. е. запускать каждый день второй недели и проверять день недели как часть команды) - это поддерживает представление о том, что день недели является дополнительным, альтернативным фильтром, а не дополнительной квалификацией, хотя страница руководства не делает его Чисто.

Так что в вашем случае я бы использовал:

00 11 * * 4 root test $(date -d @$((`date +\%s`+604800)) +\%m) -ne $(date +\%m) && /usr/bin/rsnapshot monthly > /backups/rsnapshot_cron.txt 2>&1

Проверьте, поддерживает ли ваша date -d 'next Thursday': если это так, вы можете использовать более простое:

00 11 * * 4 root test $(date -d 'next Thu' +\%m) -ne $(date +\%m) && /usr/bin/rsnapshot monthly > /backups/rsnapshot_cron.txt 2>&1

Он запускается каждый четверг и проверяет, совпадает ли дата недели (604800 секунд) с тем же месяцем: если нет, то это должен быть последний четверг, чтобы выполнялась команда резервного копирования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .