Cron Expression Generator

Генеруйте cron-вирази візуально за допомогою покрокового конструктора

Швидкі шаблони

Хвилина

Година

День місяця

Місяць

День тижня

Cron-вираз

0 9 * * *

minute hour day(month) month day(week)

Що таке генератор cron-виразів?

Генератор cron-виразів — це інструмент, який будує рядки cron-розкладів через візуальний інтерфейс замість того, щоб писати їх вручну. Cron-вирази — це рядки з п'яти полів (хвилина, година, день місяця, місяць, день тижня), які визначають, коли має виконуватись повторювана задача. Формат бере початок від оригінального демона Unix cron 1979 року і зараз використовується в crontab, Kubernetes CronJobs, GitHub Actions, AWS EventBridge, Google Cloud Scheduler і десятках бібліотек для планування задач.

Написання cron-виразів по пам'яті — поширене джерело помилок. П'ять полів взаємодіють між собою неочевидними способами: значення кроку на кшталт */15 у полі хвилин дає запуски о 0, 15, 30 і 45, тоді як 5/15 починає з хвилини 5 і дає 5, 20, 35, 50. Поєднання дня місяця та дня тижня зі значеннями, відмінними від шаблонів, створює умову АБО, а не І — це дивує навіть досвідчених інженерів. Візуальний генератор усуває цю неоднозначність: ви обираєте потрібний розклад, а інструмент автоматично формує правильний синтаксис.

Генератор cron-виразів відрізняється від парсера cron-виразів. Парсер бере наявний вираз і пояснює його зрозумілою мовою. Генератор працює у зворотньому напрямку: ви описуєте потрібний розклад, а інструмент видає відповідний cron-рядок. Використовуйте генератор під час створення нової запланованої задачі; парсер — під час аудиту або налагодження вже існуючих.

Навіщо використовувати цей генератор cron?

Написання cron-виразу вручну означає запам'ятовування порядку полів, діапазонів значень і правил операторів. Одне зміщене поле перетворює щоденну задачу на ту, що виконується щохвилини. Цей генератор дозволяє обрати розклад візуально й скопіювати результат одним кліком.

🖱️
Візуальний конструктор розкладу
Обирайте значення хвилини, години, дня, місяця та дня тижня зі списків і перемикачів. Cron-вираз оновлюється в реальному часі при зміні кожного поля. Запам'ятовувати синтаксис не потрібно.
🔒
Обробка з пріоритетом конфіденційності
Весь процес генерації відбувається у вашому браузері. Жодні дані розкладу не передаються на сервер. Ваші cron-вирази та конфігурації задач залишаються на вашому пристрої.
Миттєвий результат із попереднім переглядом
У процесі побудови переглядайте згенерований cron-вираз і наступні заплановані часи запуску. Перевіряйте правильність розкладу перед тим, як вставити його в конфігурацію.
📋
Не потрібен обліковий запис
Відкрийте сторінку й починайте. Без входу, без API-ключа, без встановлення. Працює на будь-якому пристрої з сучасним браузером, зокрема на мобільних.

Варіанти використання генератора cron

Frontend-розробник
Будуйте cron-вирази для адміністративних панелей та інтерфейсів планування. Генеруйте правильний синтаксис для інтерфейсів вибору розкладу, що зберігають cron-рядки в базі даних.
Backend-інженер
Створюйте cron-вирази для черг задач, таких як Celery, Sidekiq і Bull. Генеруйте рядок розкладу, перевіряйте наступні запуски й вставляйте його в конфігурацію задачі.
DevOps / SRE
Генеруйте cron-розклади для Kubernetes CronJobs, CI/CD пайплайнів та автоматизації інфраструктури. Будуйте вирази для вікон резервного копіювання, поновлення сертифікатів і ротації журналів без синтаксичних помилок.
QA-інженер
Створюйте тестові cron-вирази, що спрацьовують через заданий інтервал для інтеграційного тестування. Генеруйте розклади з передбачуваними часами запуску для перевірки поведінки планувальника.
Дата-інженер
Будуйте cron-вирази для тригерів ETL-пайплайнів і розкладів синхронізації даних. Генеруйте розклади без перекриттів для стадій виймання, перетворення та завантаження з точним розподілом у часі.
Студент / початківець
Вивчайте синтаксис cron, експериментуючи з візуальним конструктором. Змінюйте окремі поля й спостерігайте, як змінюються вираз і наступні часи запуску. Формуйте інтуїцію щодо шаблонів, діапазонів і значень кроку.

Поширені шаблони cron-розкладів

У таблиці нижче наведено cron-вирази для найчастіше використовуваних розкладів. Більшість продакшн-задач відповідають одному з цих шаблонів. Змінюйте окремі поля відповідно до вашого фактичного часу.

РозкладВиразТипове використання
Every minute* * * * *Health checks, queue polling
Every 5 minutes*/5 * * * *Metrics collection, cache refresh
Every 15 minutes*/15 * * * *API sync, dashboard updates
Every hour0 * * * *Log rotation, report generation
Every 6 hours0 */6 * * *Database backups, digest emails
Daily at midnight0 0 * * *Nightly batch jobs, cleanup scripts
Daily at 9 AM0 9 * * *Daily reports, notification digests
Weekdays at 9 AM0 9 * * 1-5Business-hours tasks, standup reminders
Every Monday at midnight0 0 * * 1Weekly reports, dependency updates
First of every month0 0 1 * *Billing runs, monthly aggregation
Every Sunday at 2:30 AM30 2 * * 0Full backups during low-traffic window
January 1st at midnight0 0 1 1 *Annual reports, license renewals

Складові cron-виразів

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

Структура п'ятипольного cron-виразу:
*min0-59
*hour0-23
*day1-31
*month1-12
*weekday0-6

Чотири оператори керують тим, як значення зіставляються всередині кожного поля. Їх можна комбінувати: 1-5/2 у полі дня тижня означає понеділок, середу, п'ятницю (діапазон 1-5, крок 2).

ОператорСинтаксисПрикладРезультат
Wildcard** (minute)Every minute
Lista,b,c1,15 (day)1st and 15th
Rangea-b9-17 (hour)9 AM through 5 PM
Step*/n*/10 (minute)Every 10 minutes
Range+Stepa-b/n10-30/5 (min)10, 15, 20, 25, 30

Приклади коду

Як створювати та реєструвати cron-розклади в Node.js, Python, Go та bash:

JavaScript (Node.js)
import { CronJob } from 'cron';

// Build a cron expression: every weekday at 9:00 AM
const expression = '0 9 * * 1-5';

const job = new CronJob(expression, () => {
  console.log('Running weekday morning task');
});
job.start();

// Programmatic expression building
function buildCron({ minute = '*', hour = '*', dom = '*', month = '*', dow = '*' }) {
  return `${minute} ${hour} ${dom} ${month} ${dow}`;
}

const expr = buildCron({ minute: '0', hour: '*/6', dow: '1-5' });
console.log(expr); // → "0 */6 * * 1-5"
Python
from crontab import CronTab

# Create a new cron job for the current user
cron = CronTab(user=True)

# Build a job: run backup.py every day at 2:30 AM
job = cron.new(command='python3 /home/user/backup.py')
job.setall('30 2 * * *')

print(job)           # → 30 2 * * * python3 /home/user/backup.py
print(job.is_valid()) # → True

# Schedule every 15 minutes on weekdays
job2 = cron.new(command='/usr/bin/sync-data')
job2.minute.every(15)
job2.dow.during('MON', 'FRI')

cron.write()  # Save to user's crontab

# Verify next run time
from croniter import croniter
from datetime import datetime

it = croniter('30 2 * * *', datetime.now())
print(it.get_next(datetime))  # → next 2:30 AM timestamp
Go
package main

import (
    "fmt"
    "strings"
    "github.com/robfig/cron/v3"
)

// BuildCron constructs a 5-field cron expression from parts
func BuildCron(minute, hour, dom, month, dow string) string {
    fields := []string{minute, hour, dom, month, dow}
    return strings.Join(fields, " ")
}

func main() {
    // Generate: every weekday at 9 AM
    expr := BuildCron("0", "9", "*", "*", "1-5")
    fmt.Println(expr) // → 0 9 * * 1-5

    // Validate and schedule it
    c := cron.New()
    _, err := c.AddFunc(expr, func() {
        fmt.Println("Running scheduled task")
    })
    if err != nil {
        fmt.Printf("Invalid expression: %v\n", err)
        return
    }
    c.Start()
}
Bash (crontab)
# Open the crontab editor to add a new job
crontab -e

# Add a cron job without opening an editor:
# Run cleanup.sh every Sunday at 3 AM
(crontab -l 2>/dev/null; echo "0 3 * * 0 /home/user/cleanup.sh") | crontab -

# Generate and add a job: every 10 minutes, log disk usage
EXPR="*/10 * * * *"
CMD="df -h >> /var/log/disk-usage.log"
(crontab -l 2>/dev/null; echo "$EXPR $CMD") | crontab -

# Verify the job was added
crontab -l | tail -1
# → */10 * * * * df -h >> /var/log/disk-usage.log

# Remove all cron jobs (use with caution)
# crontab -r

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

Який правильний порядок полів у cron-виразі?
Стандартний порядок п'яти полів: хвилина (0-59), година (0-23), день місяця (1-31), місяць (1-12), день тижня (0-6, де 0 — неділя). Цей порядок визначено POSIX і використовується в crontab, Kubernetes, GitHub Actions і більшості бібліотек cron. Деякі інструменти, наприклад Quartz Scheduler, додають поле секунд на початку, утворюючи шість полів, але п'ятипольна структура є універсальним стандартом.
Як згенерувати cron-вираз для 'кожних N хвилин'?
Використовуйте оператор кроку в полі хвилин: */N. Для кожних 5 хвилин напишіть */5 * * * *. Для кожних 15 хвилин — */15 * * * *. Оператор кроку рівномірно ділить діапазон поля. Зверніть увагу: */7 не дає запусків кожні 7 хвилин через межі годин; він дає запуски о хвилинах 0, 7, 14, 21, 28, 35, 42, 49, 56, а потім скидається до 0 на початку наступної години.
Чи можна згенерувати cron-вираз, що виконується в останній день кожного місяця?
Стандартний POSIX cron не має оператора 'останній день місяця'. Ви не можете написати 0 0 L * * у crontab або Kubernetes CronJobs. Обхідні шляхи включають планування на дні 28-31 з додаванням перевірки в оболонці ([ $(date +%d -d tomorrow) -eq 01 ]) або використання розширеної реалізації cron, наприклад Quartz, що підтримує модифікатор L. AWS EventBridge також може нативно орієнтуватись на останній день.
У чому різниця між генератором cron і парсером cron?
Генератор cron приймає ваші вимоги до розкладу (наприклад, 'щодня у будні о 9 ранку') і видає правильний cron-вираз (0 9 * * 1-5). Парсер cron працює в зворотному напрямку: він приймає наявний вираз і формує зрозумілий опис. Використовуйте генератор під час створення нових розкладів. Парсер — під час перегляду або налагодження вже наявних.
Як уникнути перекриття cron-задач?
Cron сам по собі не запобігає перекриванню запусків. Якщо задача, запланована щохвилини, виконується 90 секунд, два екземпляри будуть перекриватися. Щоб запобігти цьому, використовуйте файл блокування (flock у bash), розподілене блокування (Redis, etcd) або вбудовану політику паралельності вашого планувальника. Kubernetes CronJobs мають поле concurrencyPolicy, яке можна встановити в Forbid або Replace. У планувальниках рівня застосунків, наприклад Celery, використовуйте solo-пул або блокування на рівні задачі.
Чи є 0 або 1 першим днем тижня в cron?
У POSIX cron 0 — це неділя, а 6 — субота. І 0, і 7 представляють неділю в більшості реалізацій. Quartz Scheduler використовує іншу угоду, де 1 — неділя, а 7 — субота. Якщо ваша система підтримує іменовані дні (SUN, MON, TUE), використовуйте їх замість чисел, щоб уникнути плутанини між платформами.
Як згенерувати cron-вираз для конкретного часового поясу?
Традиційний crontab використовує місцевий часовий пояс системи. На деяких системах можна задати змінну TZ у файлі crontab (TZ=America/New_York). Kubernetes CronJobs підтримують поле .spec.timeZone починаючи з версії 1.25. AWS EventBridge і Google Cloud Scheduler дозволяють вказати часовий пояс для кожного розкладу. Завжди документуйте очікуваний часовий пояс поруч із cron-виразом у вашій конфігурації.