rsnapshot: что не так с моим crontab?
Я использую 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 ответ
Согласно этому сайту, ваша строка означает "В 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 секунд) с тем же месяцем: если нет, то это должен быть последний четверг, чтобы выполнялась команда резервного копирования.