Почему моя работа cron началась в этом месяце?


31

Сегодня 1 ноября 2016 года или (недвусмысленно) цифрами, 2016-11-01.

У меня задание пользователя cron настроено так:

# m h  dom mon dow   command
33  3   1  */2  *    /home/user/...

Предполагается, что он запускается каждый второй месяц первого числа месяца в 3:33, независимо от того, какой это день недели, но по какой-то причине он выполнялся сегодня, даже если 11 не делится на 2.

Может кто-нибудь объяснить мне это? Мое предположение о делимости на 2 неверно?

РЕДАКТИРОВАТЬ: я забыл упомянуть, я использую cronверсию "3.0pl1-127 + deb8u1" на компьютере с Debian 8.6 "Jessie".



Итак, вы говорите о 11-м дне 2016-го месяца 1-го года. :) (Самым распространенным порядком дат в Америке является месяц-день-год.)
цыплята

@chicks проверить историю редактирования этого вопроса, я изначально использовал формат, который вы упомянули ;-)
comfreak

@ ты имеешь ввиду месяц / день / год?
user253751

@immibis Нет. comfreak: lol
птенцы

Ответы:


61

Это /не арифметическое выражение, оно описывает «значения шага» в допустимом диапазоне значений. Таким образом, поскольку месяцы всегда начинаются с « 1вместо» 0, /2это означает «принимать все остальные значения», что приводит к (1, 3, 5, 7, 9, 11).

Это также описано на странице руководства, хотя это не очень ясно и легко понять:

Значения шага могут использоваться вместе с диапазонами. После диапазона с «<число>» указывается пропуск значения числа через диапазон. Например, «0-23 / 2» может использоваться в поле часов для указания выполнения команды через час (альтернатива в стандарте V7 - «0,2,4,6,8,10,12,14,16»). , 18,20,22" ). Шаги также разрешены после звездочки, поэтому, если вы хотите сказать «каждые два часа», просто используйте «* / 2».


2
Спасибо за ваш ответ, я сам понял это после того, как снова прочитал страницу руководства и проработал это в моей голове. Обычно я работал только с краткосрочными заданиями cron, где числа начинаются с 0, и мое предположение действительно имело смысл.
Comfreak

18
Я просто подумал, почему этот вопрос не задают чаще, и пришел к тому же выводу: потому что мало кто запускает работу с чем-то, кроме "*" в поле месяца.
Свен

Один вопрос, что произойдет, если число не делится, например */5? Это будет 1,6,11,1,6 ... или 1,6,11,4,9 ...? Я предполагал, что «в пределах допустимого диапазона значений» означает, что у него нет памяти, но теперь я не был так уверен в этом.
MariusSiuram

@MariusSiuram: первый вариант. Опять же, это не арифметическая операция. crondпросто берет список возможных значений, применяет селектор шага один раз и затем повторно использует эти результаты.
Свен

4

Сегодня первый день ноября.

* / 2 означает, что ваш cronjob будет выполняться раз в два месяца, как вы говорите.

Таким образом, в следующем месяце (декабре) cronjob не будет выполнен, но месяц (январь) после него будет.

За месяц до этого месяца (октябрь) cronjob не был исполнен. Но в сентябре это было.


1
Таким образом, вы считаете, что */2в поле месяца эквивалентно 1-11/2, а не 2-12/2. Я не говорю, что вы не правы, но можете ли вы предоставить какую-либо подтверждающую документацию?
MadHatter поддерживает Монику

@MadHatter Свен все хорошо объяснил.
Сироты

1
Я согласен, и лучше всего он цитирует авторитетные источники.
MadHatter поддерживает Монику

2
Просто указав, что сентябрь предшествует октябрю, а не августу ;-)
hjpotter92
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.