fixmint
UK

Як прочитати cron-вираз поле за полем

Автор: · · 5 хв читання

Cron-вираз — це короткий рядок тексту, який повідомляє планувальнику, коли запускати завдання. Звична форма має п'ять полів, розділених пробілами: хвилина, година, день місяця, місяць і день тижня. Рядок 0 9 * * 1-5 означає 09:00 з понеділка по п'ятницю. Кожне поле — це число, назва, список, діапазон або крок, а * означає кожне значення. Завдання запускається в ті моменти, коли збігаються всі поля.

Пояснювач cron-виразівCron запускається не вчасноБезкоштовно

П'ять полів

ПолеДопустимі значенняПриклад
Хвилинавід 0 до 5930 — це 30-та хвилина години
Годинавід 0 до 239 — це 09:00 у 24-годинному форматі
День місяцявід 1 до 3115 — 15-те число
Місяцьвід 1 до 12, або від JAN до DEC3 або MAR — березень
День тижнявід 0 до 6, або від SUN до SAT0 або SUN — неділя, 1 — понеділок

Деякі системи також приймають 7 як неділю, але не всі, тож користуйтеся 0 або SUN. У цій формі в cron немає поля секунд, тож найменший крок — одна хвилина.

Списки, діапазони, кроки й назви

  • означає кожне значення в полі. * * * * запускається щохвилини.
  • Список використовує коми. 0 9,17 * * * запускається о 09:00 і о 17:00 щодня.
  • Діапазон використовує дефіс. 1-5 у полі дня тижня означає з понеділка по п'ятницю.
  • Крок використовує косу риску. */15 у полі хвилин означає 0, 15, 30 і 45. 10-30/5 означає 10, 15, 20, 25 і 30.
  • Назви, як-от MON-FRI, можуть замінювати числа. Вони легші для читання, якщо ваш планувальник їх приймає.

Ці частини можна комбінувати. 0 8-18/2 * * * запускається на 0-й хвилині кожної другої години від 08:00 до 18:00.

Типові розклади

ВиразЗначення
* * * * *Щохвилини
/15 * * *Кожні 15 хвилин
0 * * * *На 0-й хвилині кожної години
0 2 * * *Щодня о 02:00
0 9 * * 1-509:00, з понеділка по п'ятницю
0 9,17 * * *09:00 і 17:00 щодня
30 6 1 * *06:30 першого числа кожного місяця
0 0 * * 0Північ щонеділі
0 0 1 1 *Північ 1 січня
/5 9-17 * 1-5Кожні 5 хвилин з 09:00 до 17:55, з понеділка по п'ятницю

Зверніть увагу: 0 0 * * — це північ, а 0 12 * * — полудень. Помилка з годиною — одна з найпоширеніших.

День місяця і день тижня

Коли обидва поля — день місяця і день тижня — обмежені, завдання запускається, коли збігається будь-яке з них. Це класичне правило у Vixie cron і багатьох системах, що від нього походять. Тож 0 0 13 * 5 запускається о півночі 13-го числа кожного місяця, а також щопʼятниці. Часто очікують лише п'ятницю 13-го, а запусків виходить більше, ніж планувалося.

Якщо одне з цих двох полів — *, враховується лише інше. Щоб запускати завдання лише в п'ятницю 13-го, плануйте його на кожну п'ятницю і перевіряйте дату всередині скрипта. Інші планувальники, зокрема деякі хмарні сервіси, можуть використовувати інші правила, тож читайте їхню документацію.

Часові пояси та літній час

Cron працює за годинником машини або сервісу, на якому запущений, зазвичай це місцевий часовий пояс цієї машини. Завдання, налаштоване на 02:30, запускається о 02:30 за цим годинником. Спершу перевірте пояс (у Linux його показує date). Якщо ви хочете, щоб завдання всюди йшли за одним годинником, багато команд запускають сервери в UTC, а деякі планувальники дозволяють задавати часовий пояс для кожного завдання.

Літній час переводить годинник двічі на рік. Навесні багато місць переходять від 02:00 одразу на 03:00, тож завдання о 02:30 не має коли запуститися. Восени година з 01:00 до 01:59 трапляється двічі. Планувальники обробляють ці випадки по-різному: одні пропускають завдання, інші запускають його один раз, а треті — двічі. Тримайте завдання поза раннім ранковим вікном переходу або використовуйте UTC, якщо різниця для вас важлива.

Шість полів і Quartz

Деякі планувальники додають поле секунд на початку, тож /10 * * * * запускається кожні 10 секунд. Планувальник Quartz для Java використовує секунди, хвилини, години, день місяця, місяць, день тижня і необов'язковий рік, а також додає чотири спеціальні символи:

  • ? означає «конкретного значення немає». Quartz вимагає його в полі дня місяця або дня тижня — в тому, яке ви не задаєте.
  • L означає останній. L у полі дня місяця — це останній день місяця, а 6L у полі дня тижня — остання п'ятниця.
  • W означає найближчий будній день. 15W — це будній день, найближчий до 15-го, і він не переходить в інший місяць.
  • # означає n-й день тижня. 6#3 — це третя п'ятниця.

Quartz нумерує дні інакше, ніж у п'ятипольовій формі. Його 1 — неділя, а 7 — субота, тож понеділок–п'ятниця — це 2-6, а не 1-5. Завжди перевіряйте, який формат використовує ваш планувальник, перш ніж копіювати рядок.

Типові помилки

  • */7 у полі хвилин. Значення будуть 0, 7, 14 і так далі до 56. Наступним було б 63, але такого значення не існує, тож після 56 запуск відбувається на 0-й хвилині наступної години. Проміжок — лише чотири хвилини, а інтервали нерівномірні. Використовуйте крок, що ділить 60 без остачі, наприклад 5, 10, 15 або 30.
  • 30 лютого. Такої дати не існує, тож 0 0 30 2 * ніколи не запускається. Так само і з 31-м числом у місяці з 30 днями. За правилом «будь-яке з двох» обмеження дня тижня все ще може викликати запуск в інші дні, тож перевіряйте результат.
  • Година 24 або хвилина 60. Це поза допустимим діапазоном. Більшість планувальників відхиляють такі значення під час збереження, але не всі.
  • Очікування секунд. П'ятипольовий рядок запускається лише у цілі хвилини.
  • Плутанина cron із регулярними виразами. У cron означає кожне значення. У регулярному виразі означає повторити попередній елемент. Для шаблонів скористайтеся тестером регулярних виразів, а рядки cron тримайте окремо.

Перевірте наступні запуски

Перш ніж покладатися на розклад, прочитайте рядок простими словами і випишіть кілька найближчих часів запуску. Пояснювач cron-виразів робить обидві речі, і це найшвидший спосіб помітити правило «будь-яке з двох» або дивний крок.

Короткі відповіді

Перше поле — хвилини чи секунди?

Хвилини, у стандартній п'ятипольовій формі. Лише деякі шестипольові планувальники додають секунди, і ставлять їх першими.

Чому моє завдання запускається по п'ятницях і ще 13-го?

Поля дня місяця і дня тижня обидва задані, тож завдання запускається, коли збігається будь-яке з них. Задайте одному полю *, якщо хочете лише інший варіант.

Чи використовує cron UTC?

Лише якщо машину або сервіс налаштовано на UTC. Інакше використовується місцевий часовий пояс цієї системи.

Переклад з Англійський оригінал за допомогою ШІ.

Коментарі

    Коментарів поки немає. Будьте першим.

    Ваша оцінка (необов’язково)

    Ваша пошта ніколи не показується і не зберігається.

    Обкладинка: Agentic AI in the BrowserAgentic AI in the Browser

    Сценарії використання ШІ-процесів у браузері, які насамперед захищають приватність: та сама ідея «робіть на своєму пристрої», на якій побудовано fixmint.

    $4.99Придбати на GumroadАнглійською