Розробка · 3 хв читання ·

Вирази cron простими словами: 10 готових прикладів

П’ять полів, чотири символи й одна пастка з часовими поясами. Вчимося читати й писати розклади cron на прикладах, які можна скопіювати.

Cron — планувальник, який запускає резервні копії, звіти й завдання очищення на серверах по всьому світу, а його синтаксис використовується й у GitHub Actions, CronJob у Kubernetes і більшості хмарних планувальників. Розклад — це п’ять полів через пробіл.

┌ хвилина (0-59)
│ ┌ година (0-23)
│ │ ┌ день місяця (1-31)
│ │ │ ┌ місяць (1-12)
│ │ │ │ ┌ день тижня (0-6, 0 = неділя)
* * * * *

Чотири символи

* означає будь-яке значення. Кома задає список (1,15), дефіс — діапазон (1-5), скісна риска — крок (*/15 = кожні 15 одиниць). Цих чотирьох вистачає майже для будь-якого розкладу.

10 прикладів

*/5 * * * *       кожні 5 хвилин
0 * * * *         щогодини, на початку години
0 9 * * *         щодня о 09:00
30 2 * * *        щоночі о 02:30
0 9 * * 1-5       у будні о 09:00
0 18 * * 5        щоп’ятниці о 18:00
0 0 1 * *         опівночі 1-го числа кожного місяця
0 0 1 1 *         раз на рік, 1 січня
0 */6 * * *       кожні 6 годин
15 8,12,17 * * *  щодня о 08:15, 12:15 і 17:15

Пастка 1: день місяця й день тижня

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

Пастка 2: часовий пояс

У cron немає власного часового поясу. Завдання виконується за часом машини чи сервісу, який його запускає, а це часто UTC. Завдання 0 9 * * * на сервері в UTC спрацює о 09:00 UTC, а у вас це може бути на кілька годин раніше чи пізніше, до того ж перехід на літній час може зсунути його ще раз.

Пастка 3: накладання та пропуск запусків

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

*/5 * * * *  flock -n /tmp/backup.lock /usr/local/bin/backup.sh

Скорочення та дрібні відмінності

Багато реалізацій cron розуміють скорочення @hourly, @daily, @weekly, @monthly і @reboot замість п’яти полів. У більшості з них неділю можна записати як 0 або 7, а також дозволені назви на кшталт MON чи JAN. Платформи відрізняються в деталях, тож звіряйтеся з документацією системи, яка запускатиме завдання, особливо в керованих хмарних планувальниках.

Куди йде вивід?

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

30 2 * * *  /usr/local/bin/report.sh >> /var/log/report.log 2>&1

Перевірте перед деплоєм

Вставте вираз у розшифрувальник cron-виразів від 4Dev, і він перекаже розклад простими словами. Підтримується стандартний формат із п’яти полів; вирази з шести чи семи полів із секундами або роками, як у Quartz чи Spring, відхиляються з помилкою.

Відкрити розшифрувальник cron-виразів

LinkedInXFacebook