#cron #crontab #cronexpression
#cron #crontab #cronexpression
Вопрос:
У меня есть сценарий резервного копирования, синхронизирующий некоторые файлы каждый 3-й день.
# m h dom mon dow
0 5 */3 * * backup /home/backup/scripts/system_backup.sh
Сегодня я проверял резервную копию, и ее не было.
Я ожидал, потому что сегодня 27-е число, 27 / 3
это четное число, оно будет выполнено.
Временные метки других резервных копий содержат дни 19
, 22
, 25
Разве он не должен выполняться, как в дни 18
, 21
, 24
, 27
?
Временная метка сервера прямо сейчас Fri Jun 27 08:52:00 UTC 2014
.
Ответ №1:
Со страницы руководства для crontab(5)
:
Значения шага могут использоваться в сочетании с диапазонами. После диапазона с помощью `/» указывается пропуск значения числа через диапазон.
По сути, это означает, что значения используются в индексах на основе 0, которые делятся на <number>
.
Для dom *
это то же 1-31
самое, что и . Так */3
и есть 1-31/3
. Это означает, что он начнется с 1 (индекс 0), затем добавит 3, чтобы перейти к следующему (4, с индексом 3) и так далее.
Если вы хотите, чтобы cron выполнялся в дни, кратные трем, вы можете использовать 3-31/3
вместо этого.
Комментарии:
1. Итак, левая сторона — это диапазон, а правая сторона — шаги. Когда я говорю «каждый второй день», для меня это звучит логично (1, 3, 5 — не умножается на 2). Спасибо!