Побудувати cron-вираз

будує cron-вираз із візуальних полів або пресетів (щохвилини, щогодини, щодня, щотижня...)

Навіщо візуальний cron builder?

Вираз cron складається з п'яти полів і все одно залишається одним з найбільших генераторів помилок у виробництві. Скільки разів розробник писав 0 0 * * 1, думаючи "кожного понеділка", не пам'ятаючи, що 1 може означати неділю залежно від реалізації? Скільки разів плутали */15 з 15? Cron builder відповідає на цю потребу: візуально складати crontab expression, з типових налаштувань або окремих полів, і отримувати фінальний вираз, готовий для вставки у crontab Linux, Kubernetes CronJob або планувальник GitHub Actions.

Інструмент є протилежністю нашого cron decoder: там де конвертер приймає вираз і розгортає наступні виконання, builder приймає людські вибори і виробляє відповідний cron-вираз.

Як це працює

Графічний інтерфейс пропонує два додаткові режими складання:

  • Режим попередніх налаштувань: селектор частоти (every minute, every hour, every day, every week, every month, every year, custom), який миттєво генерує дійсний cron expression.
  • Режим полів: п'ять редагованих полів (хвилина, година, день місяця, місяць, день тижня), де ви вільно вводите *, ціле число, діапазон 1-5, список 1,15,30 або крок */15.

Builder оновлює вираз у реальному часі та відображає стислий людський прочит ("щодня о 3-й ранку", "кожні 15 хвилин"), який служить запобіжником: якщо фраза не відповідає вашому наміру, вираз, ймовірно, неправильний.

П'ять полів cron, зрозуміло

Стандартний вираз cron містить п'ять полів, розділених пробілами:

хвилина  година  день-місяця  місяць  день-тижня
*        *       *            *       *
  • хвилина (від 0 до 59);
  • година (від 0 до 23);
  • день місяця (від 1 до 31);
  • місяць (від 1 до 12 або абревіатури Jan, Feb тощо);
  • день тижня (від 0 до 7, 0 і 7 обидва означають неділю у більшості реалізацій).

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

Типові випадки використання

  • Розробник, що вивчає cron: візуалізувати взаємодію кожного поля, без ризику неправильного виразу у виробництві.
  • Sysadmin у поспіху: генерувати за кілька секунд розклад для cron Linux, Kubernetes CronJob або завдання Ansible без повторного читання man page.
  • Розробник без досвіду POSIX: виробляти дійсний crontab expression для Symfony Scheduler, Laravel Scheduler або node-cron без знання історичного синтаксису.
  • DevOps на перевірці: швидко прототипувати вираз для пропозиції у pull request, потім перевіряти з cron decoder.
  • Міграція legacy: переформулювати старий cron-вираз через builder, щоб переконатися у семантиці перед його розгортанням деінде.

Типові попередні налаштування

Вибір попереднього налаштування перезаписує окремі поля та виробляє відповідний вираз:

  • Щохвилини: * * * * *. Уникайте у виробництві, якщо немає особливої потреби.
  • Щогодини: 0 * * * *. На початку кожної години.
  • Щодня: 0 0 * * *. О опівночі.
  • Щотижня: 0 0 * * 0. Щонеділі о опівночі.
  • Щомісяця: 0 0 1 * *. 1-го числа місяця о опівночі.
  • Щороку: 0 0 1 1 *. 1 січня о опівночі.

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

Вираз Людський прочит
0 0 * * * Щодня о опівночі
*/15 * * * * Кожні 15 хвилин
0 9 * * 1-5 Щодня у будні о 9-й
0 0 1 * * 1-го числа місяця о опівночі
0 0 * * 0 Щонеділі о опівночі
*/5 9-17 * * 1-5 Кожні 5 хвилин у робочі години
0 3 * * * Щодня о 3-й ранку
30 2 1,15 * * 1-го і 15-го числа місяця о 2:30

Складання спеціального виразу

Для більш специфічних випадків, помічник надає п'ять полів для вільного введення. Кілька корисних прикладів:

  • Щодня о 3-й ранку: хвилина=0, година=3, інші поля *.
  • Кожні 15 хвилин: хвилина=*/15, інші поля *.
  • З понеділка по п'ятницю о 9-й: хвилина=0, година=9, день-тижня=1-5.
  • Кожного 1-го і 15-го числа місяця опівдні: хвилина=0, година=12, день-місяця=1,15.
  • Кожні 5 хвилин між 9-ю і 17-ю: хвилина=*/5, година=9-17.

Як користуватися cron builder

  1. Виберіть попереднє налаштування (every minute, every hour, every day, every week, every month, every year), що відповідає основі вашої потреби.
  2. Уточніть при необхідності, редагуючи безпосередньо п'ять полів (хвилина, година, день місяця, місяць, день тижня).
  3. Прочитайте людський прочит, згенерований інструментом, для підтвердження наміру.
  4. Скопіюйте вироблений cron expression за допомогою кнопки копіювання.
  5. Перевірте розклад за допомогою нашого cron decoder, який обчислює наступні реальні дати виконання.
  6. Вставте вираз у ваш crontab Linux, Kubernetes CronJob, Symfony Scheduler або робочий процес GitHub Actions.

Класичні пастки

  • Комбінація дня місяця та дня тижня: якщо обидва не є *, поведінка відрізняється залежно від реалізацій. Linux/Vixie cron застосовує АБО; сучасні бібліотеки іноді мають іншу поведінку. Уникайте.
  • День 1 = понеділок чи неділя?: залежно від країни та конвенції. Більшість Unix cron вважають неділю=0 і суботу=6. Перевіряйте свій планувальник.
  • Часовий пояс: Unix cron за замовчуванням використовує часовий пояс сервера. Прикладні планувальники (Symfony Scheduler, Quartz) часто дозволяють встановити окремий часовий пояс.
  • Відсутня хвилина: * * * * * виконує завдання щохвилини, що рідко є бажаним. Подумайте про встановлення точного тригера (0) для погодинних завдань.

Людський прочит і виведення

На додаток до cron expression, інструмент пропонує стислий людський прочит ("щодня о опівночі", "кожні 5 хвилин"). Це запобіжник: якщо фраза не відповідає вашому наміру, вираз, ймовірно, неправильний. Для складного випадку потім використовуйте наш

Часті запитання

Чи можна редагувати вираз вручну після використання інтерфейсу?

Так. Builder не є ексклюзивним режимом: п'ять полів залишаються редагованими у будь-який момент. Можна почати з попереднього налаштування, потім вручну відрегулювати поле для отримання crontab expression на замовлення. Людський прочит перераховується негайно.

Чи підтримує інструмент формат Quartz із 6 полями (з секундами)?

Ні: формат із 5 полів є Unix стандартом і спільною базою для більшості планувальників (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler). Quartz (Java) приймає додаткове поле для секунд та специфічні символи (?, L, W, #), але ця потреба залишається рідкою.

Як обробляється часовий пояс?

Builder виробляє нейтральний cron-вираз: саме рушій, що виконує завдання, застосовує свій часовий пояс. На crontab Linux - це TZ сервера. На GitHub Actions - UTC. На Kubernetes 1.27+ можна встановити spec.timeZone у маніфесті. Symfony Scheduler та Quartz надають окремий часовий пояс для кожного завдання.

Як перевірити вираз без його виконання у виробництві?

Використовуйте наш cron decoder. Він обчислює N наступних виконань з поточного моменту, не запускаючи жодного завдання. Це найкращий спосіб підтвердити, що cron expression спрацьовує вчасно перед розгортанням.

Який зв'язок з Symfony Scheduler?

Symfony Scheduler приймає cron-вирази з 5 полів через Schedule::cron('0 3 * * *', ...). Вираз, вироблений builder, може бути вставлений таким як є. Те саме для Laravel Scheduler (->cron('...')), node-cron, Hangfire та Airflow.

Чи потрібно префіксувати команду у системному crontab?

Так, у /etc/crontab потрібен користувач (0 3 * * * www-data /usr/bin/php ...), тоді як crontab -e для користувача його опускає. Сам вираз залишається ідентичним.

Приклад запиту

curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
  -H "Content-Type: application/json" \
  -d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'

Схема вхідних даних

Поле Тип Обов'язкове За замовчуванням
preset choice (none, every_minute, hourly, daily, weekly, monthly, yearly) none
minute string *
hour string *
day_of_month string *
month string *
day_of_week string *

Точки доступу

  • GET https://cdrn.fr/api/v1/tools - перелічує всі доступні інструменти
  • GET https://cdrn.fr/api/v1/tools/cron-builder - отримує схему цього інструменту
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - виконує цей інструмент з JSON-payload