Чому в цьому місяці працювала моя робота?


31

Сьогодні 1 листопада 2016 року або в (однозначних) числівниках, 2016-11-01.

У мене налаштована робота користувача cron так:

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

Він повинен працювати кожен другий місяць першого місяця о 3:33 ранку, незалежно від того, який день тижня, але він чомусь був запущений сьогодні, хоча 11 не ділиться на 2.

Може хтось мені це пояснить? Чи моє припущення про подільність на 2 неправильне?

EDIT: Я забув згадати, я працюю на cronверсії "3.0pl1-127 + deb8u1" на машині Debian 8.6 "Jessie".



Отже, ви говорите про 11-й день 2016-го місяця року 1. :) (Найпоширеніший порядок побачень в Америці - місяць-день-рік.)
пташенята

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

@chicks ти маєш на увазі місяць / день / рік?
користувач253751

@immibis No. ... comfreak: lol
chicks

Відповіді:


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
Дякую за вашу відповідь, я щойно це зрозумів, прочитавши сторінку чоловіка ще раз і проробивши це в голові. Я, як правило, працював лише з короткостроковими роботами на кронах, де цифри починаються з 0, і моє припущення насправді мало сенс.
comfreak

18
Я просто замислювався, чому це питання не задають частіше, і дійшов одного і того ж висновку: Тому що мало людей працюють із завданням, а не "*" у полі місяця.
Свен

Одне питання, що буде, якщо число не розділиться, наприклад */5? Це було б 1,6,11,1,6 ... чи було б 1,6,11,4,9 ...? Я припускав, що "понад дозволений діапазон значень" означає, що він не має пам'яті, але зараз я не був у цьому впевнений.
MariusSiuram

@MariusSiuram: Перший варіант. Знову ж таки, це не арифметична операція. crondпросто приймає список можливих значень, застосовує перемикач кроків один раз і потім повторно використовує ці результати.
Свен

4

Сьогодні перший день листопада.

* / 2 означає, що ваш cronjob буде виконуватись кожен другий місяць, як ви говорите.

Тож у наступному місяці (грудні) кронобур не буде виконуватися, а місяць (січень) після нього.

За місяць до цього місяця (жовтень) кронжаб не виконувався. Але у вересні це було.


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

@MadHatter Свен це добре пояснив.
Сиріт

1
Я згоден, а найкраще він цитував авторитетні джерела.
MadHatter підтримує Моніку

2
Тільки вказуючи, вересень передує жовтні, а не
серпню
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.