Utilia

Конструктор виразів cron

Складіть вираз cron за полями, прочитайте його простими словами, перегляньте наступні запуски в часовому поясі й перетворіть на формат systemd, Quartz чи AWS.

Конструктор

ПолеРежимЗначення
Хвилина0–59
Година0–23
День місяця1–31, L
Місяць1–12 або JAN–DEC
День тижня0–7 (0 і 7 = неділя) або SUN–SAT

Як скласти вираз cron

  1. Введіть або вставте вираз у поле Вираз cron чи виберіть його серед Шаблони. Макроси на кшталт @daily або @weekly також приймаються.
  2. Або скористайтеся Конструктор: для кожного поля виберіть Режим (Кожне, Кожні N, Окремі значення, Діапазон чи Власний) і заповніть Значення. Вираз оновлюється в міру ваших дій, а редагування виразу оновлює конструктор.
  3. Позначте Додати поле секунд (6 полів), якщо ваш планувальник підтримує секунди.
  4. Прочитайте розклад у розділі Простими словами (українською, якщо це підтримує бібліотека опису, інакше англійською), а потім перегляньте список Наступні запуски. Виберіть Часовий пояс сервера, що виконує завдання, і в полі Скільки – кількість запусків у списку.
  5. Скопіюйте вираз кнопкою Копіювати або скористайтеся одним з Інші формати.

Помилки пояснюються окремо для кожного поля, наприклад «Хвилина: 61 виходить за межі діапазону (0–59)», тож ви точно знаєте, що виправляти.

П’ять полів cron

Стандартний рядок cron (Vixie) має п’ять полів, а далі йде команда:

Поле Дозволені значення
Хвилина 0–59
Година 0–23
День місяця 1–31
Місяць 1–12 або JAN–DEC
День тижня 0–7 (0 і 7 – неділя) або SUN–SAT

Кожне поле приймає * (кожне значення), список 1,15, діапазон 9-17, крок */15 (кожні 15 одиниць) або діапазон із кроком 0-30/10. Тож */15 9-17 * * 1-5 означає кожні 15 хвилин з 9:00 до 17:45, з понеділка по п’ятницю.

Одне правило дивує багатьох: коли обмежено і День місяця, і День тижня, класичний cron запускається, коли збігається будь-яке з них. 0 0 13 * 5 виконується кожного 13-го числа і щоп’ятниці, а не лише в п’ятницю, 13-го. У такому випадку інструмент показує попередження.

Наступні запуски та часові пояси

Cron користується годинником машини або параметром CRON_TZ/TZ у crontab. Список Наступні запуски обчислюється для вибраного вами часового поясу, зокрема з урахуванням переходу на літній і зимовий час: під час весняного переведення годинника завдання, призначене на 2:30, може бути пропущене, а восени воно може виконатися один чи два рази залежно від реалізації. Для завдань, що мають виконуватися рівно один раз, вибирайте час поза проміжком 1:00–3:00 або використовуйте UTC. Дати наступних запусків відображаються за правилами української локалі.

Vixie cron, таймери systemd, Quartz і AWS

  • Таймери systemd використовують OnCalendar= з іншим синтаксисом: Mon..Fri *-*-* 09..17:00/15:00. Умови дня тижня й дати поєднуються через І, а не АБО, тому деякі вирази cron не мають точного відповідника.
  • Quartz і Spring ставлять поле секунд першим і можуть додавати поле року. Одне з двох полів дня має бути ?, а Quartz нумерує дні тижня від 1 до 7, починаючи з неділі, на відміну від cron (0–6). Інструмент записує дні тижня назвами (MON-FRI), щоб уникнути цієї пастки.
  • AWS EventBridge використовує cron(хвилини години день місяць день-тижня рік): шість полів, без секунд, із ? в одному з полів дня та роком наприкінці.

Стандартний cron не має поля секунд. Шестипольну форму із секундами підтримують багато бібліотек (node-cron, Spring, Quartz), але не системний crontab.

Поширені запитання

Як запускати завдання кожні 5 хвилин?

Використайте */5 * * * *. Завдання виконуватиметься на 0, 5, 10… хвилині кожної години.

Як запускати завдання в останній день місяця?

Багато планувальників приймають L у полі дня місяця: 0 18 L * *. У звичайному Vixie cron запускайте завдання щодня 28–31 числа й перевіряйте в скрипті, чи завтра 1-ше число.

Що робить @reboot?

Він запускає команду один раз, коли стартує демон cron. Розкладу в нього немає, тому інструмент не може показати часи запусків.

Чому моє завдання не запускається у вказаний час?

Перевірте часовий пояс сервера, crontab користувача й /etc/crontab (у ньому є додаткове поле користувача) та змінну PATH: cron стартує з мінімальним середовищем.

Неділя – це 0 чи 7?

І те, й інше. У полі дня тижня 0 і 7 означають неділю, 1 – понеділок, а 6 – суботу.