Как cron обращается с остатками в «очень часто» рабочих местах

13

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

*/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
Джесси
источник

Ответы:

31

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

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

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

Джон
источник
Это единственный ответ, который, кажется, на самом деле отвечает на вопрос. Вы пытались это сделать, чтобы убедиться?
gparent
В течение последних 10 минут? Нет. За последние три месяца? Да, хотя не специально с интервалом в девять минут.
Джон
Не понимаю, почему мне было бы все равно, когда ты это сделал, но только если. Спасибо.
gparent
1
У меня бывшие коллеги разозлились из-за того, что "нет, вы не проверяли это, вы полагаетесь на свою неисправную память!" в подобных ситуациях (конечно, через 5 минут они уходят, раздраженные после того, как я докажу, что это все еще работает), поэтому у меня сформировалась привычка заранее застраховаться от этого.
Джон
2
Первый шаг в тестировании - убедиться, что у вас та же марка и версия, что и у клиента (в данном случае - Джесси). Я пока не вижу здесь никакой подсказки о том, какой cron он использует. (Вероятно, это Vixie Cron, и эта базовая функция, вероятно, стабильна во всех версиях этой программы.)
Kaz
22

Чтобы подтвердить ответ Джона, */nв столбце минут означает «когда минута 0 mod 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.

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

Безумный Шляпник
источник
5
+1 за усилие :)
Свен