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

Как cron обрабатывает остатки в задачах «время от времени»

Если я сделаю это:

*/9 * * * * /path/to/wotnot

В какое время задание будет выполняться через два часа, начиная с 09:00

Это:

09h00
09h09
09h18
09h27
09h36
09h45
09h54
10h03
10h12
10h21
10h30
10h39
10h48
10h57

или B:

09h00
09h09
09h18
09h27
09h36
09h45
09h54
10h00
10h09
10h18
10h27
10h36
10h45
10h54

При просмотре диапазона вы интерпретируете его только в пределах этого столбца, поэтому '* / 9' в столбце минут означает «список каждую минуту, а затем выбор каждого девятого значения». Этот выбор сбрасывается в начале часа, поэтому вы перезапускаетесь в xx: 00, xx: 09, xx: 18 и т. Д. Каждый час.

Его также можно прочитать как «каждые девять минут каждого часа», что подразумевает сброс в начале часа.

Таким образом, фактическое поведение, которое вы увидите, соответствует варианту B.

Чтобы подтвердить ответ Джона, */n в столбце минут означает «когда минута равна 0 по модулю n». Вот crontab запись:

*/7 * * * *  date >> /tmp/foo

и вот результат:

Thu Jan 10 14:49:01 GMT 2013
Thu Jan 10 14:56:01 GMT 2013
Thu Jan 10 15:07:01 GMT 2013

Обратите внимание, что разрыв между двумя последними временами равен не семь минут, потому что после nn: 56 в следующий раз */7 соответствует `nn + 1: 07.

Да, я в курсе, что эти времена наступят (или они были, когда я опубликовал это); Мне пришлось довольно быстро перевести системные часы вперед, чтобы получить быстрый ответ.