Cron Expression Parser

Розбирайте cron-вирази на зрозумілі описи та переглядайте наступні часи запуску

Спробувати приклад

Cron-вираз

minute hour day(month) month day(week)

Зрозумілий опис

At 9:00 AM, Mon, Tue, Wed, Thu, Fri

Розбивка по полях

Minute

0

0–59

Hour

9

0–23

Day (month)

*

1–31

Month

*

1–12

Day (week)

1-5

0–6

Наступні 10 запланованих запусків

12026-03-26 09:00:00
22026-03-27 09:00:00
32026-03-30 09:00:00
42026-03-31 09:00:00
52026-04-01 09:00:00
62026-04-02 09:00:00
72026-04-03 09:00:00
82026-04-06 09:00:00
92026-04-07 09:00:00
102026-04-08 09:00:00

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

Cron-вираз — це рядок із п'яти полів, розділених пробілами, що визначає повторюваний розклад. Формат походить з Unix cron daemon, вперше написаного Кеном Томпсоном для Version 7 Unix у 1979 році. Кожне поле представляє одиницю часу: хвилина, година, день місяця, місяць і день тижня. Розбір cron-виразу означає перетворення цього компактного запису на зрозумілий опис і конкретний список майбутніх часів виконання.

Стандартний п'ятипольовий формат використовується crontab на Linux і macOS, CI/CD-платформами як-от GitHub Actions і GitLab CI, хмарними планувальниками AWS (EventBridge), Google Cloud Scheduler і Azure Functions, а також бібліотеками планування задач у всіх основних мовах програмування. Деякі системи розширюють формат до шести або семи полів, додаючи поле секунд або поле року, але п'ятипольовий макет, визначений POSIX, залишається базовим, який поділяють усі реалізації.

Розбирати cron-вирази вручну схильно до помилок. Взаємодія між полями створює неочевидні розклади: 0 9 1-7 * 1 означає не «кожен понеділок першого тижня», а «з 1-го по 7-е кожного місяця АБО будь-який понеділок». Cron-парсер усуває цю неоднозначність, розгортаючи кожне поле, застосовуючи правила комбінування та виводячи точні часові мітки, коли задача буде запущена.

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

Читати cron-вираз на кшталт 30 */6 1,15 * * з файлу конфігурації та точно знати, коли він спрацює, потребує розрахунків у п'яти полях одночасно. Цей парсер виконує цю роботу миттєво.

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

Випадки використання cron-парсера

Frontend-розробник
Перевіряйте cron-вирази в адміністративних панелях і інтерфейсах планування перед тим, як відправити їх на бекенд. Переконайтеся, що розклад, обраний користувачем у випадаючому списку, відповідає cron-рядку, згенерованому формою.
Backend-інженер
Налагоджуйте заплановані задачі, що запускаються в несподіваний час. Вставте cron-вираз із конфігурації черги задач (Celery, Sidekiq, Quartz) і перевірте, чи наступні часи запуску відповідають вашим очікуванням.
DevOps / SRE
Перевіряйте cron-розклади в CI/CD-пайплайнах, Kubernetes CronJobs і конфігураціях хмарних планувальників. Переконайтеся, що задачі резервного копіювання, оновлення сертифікатів і скрипти очищення правильно розплановані перед розгортанням.
QA-інженер
Перевіряйте, що заплановані задачі в тестовому середовищі відповідають виробничому розкладу. Виловлюйте помилки зсуву на одиницю в полях місяця або дня тижня, перш ніж вони призведуть до пропущених запусків у продакшені.
Інженер з даних
Перевіряйте cron-тригери для ETL-пайплайнів і задач синхронізації даних. Переконайтеся, що вікна вилучення не перекриваються і що залежні системи мають достатньо часу для підготовки.
Студент / той, хто навчається
Вивчайте синтаксис cron, експериментуючи з різними виразами та спостерігаючи результати в режимі реального часу. Розвивайте інтуїцію щодо того, як взаємодіють символи підстановки, діапазони та значення кроку.

Довідник синтаксису cron-виразів

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

ПолеДіапазонОператориОпис
Minute0–59* , - /Minute within the hour
Hour0–23* , - /Hour of the day (24-hour)
Day (month)1–31* , - /Day of the month
Month1–12* , - /Month of the year (or JAN–DEC)
Day (week)0–6* , - /Day of the week (0 = Sunday, or SUN–SAT)

Чотири спеціальні символи контролюють, як значення зіставляються в кожному полі:

СимволНазваПоведінка
*WildcardMatches every possible value in the field. * in the minute field means "every minute."
,ListSeparates individual values. 1,15 in the day field means "the 1st and 15th."
-RangeDefines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday."
/StepDefines an interval. */10 in the minute field means "every 10 minutes." 5/15 means "5, 20, 35, 50."

Ось поширені cron-вирази, що охоплюють більшість потреб планування:

ВиразРозклад
* * * * *Every minute
0 * * * *Every hour (at minute 0)
*/15 * * * *Every 15 minutes
0 9 * * *Every day at 9:00 AM
0 9 * * 1-5Weekdays at 9:00 AM
30 2 * * 0Every Sunday at 2:30 AM
0 0 1 * *First day of every month at midnight
0 0 * * 1Every Monday at midnight
0 0 1 1 *January 1st at midnight (yearly)
0 */6 * * *Every 6 hours
5,35 * * * *At minute 5 and 35 of every hour
0 9-17 * * 1-5Every hour from 9 AM to 5 PM, weekdays

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

Як розбирати cron-вирази та обчислювати наступні часи запуску в популярних мовах:

JavaScript (Node.js)
import cronstrue from 'cronstrue';

// Parse cron to human-readable text
cronstrue.toString('0 9 * * 1-5');
// → "At 09:00 AM, Monday through Friday"

cronstrue.toString('*/15 * * * *');
// → "Every 15 minutes"

// Validate with cron-parser and get next run times
import { parseExpression } from 'cron-parser';

const interval = parseExpression('30 2 * * 0');
console.log(interval.next().toISOString());
// → next Sunday at 02:30 UTC

// Iterate over the next 5 runs
for (let i = 0; i < 5; i++) {
  console.log(interval.next().toString());
}
Python
from crontab import CronTab
from croniter import croniter
from datetime import datetime

# Parse and describe a cron expression
cron = CronTab('0 9 * * 1-5')
print(cron.next(default_utc=True))
# → seconds until next run

# Get the next 5 run times with croniter
base = datetime.now()
cron_iter = croniter('0 9 * * 1-5', base)
for _ in range(5):
    print(cron_iter.get_next(datetime))
# → next 5 weekday 09:00 timestamps

# Check if a specific time matches
print(croniter.match('*/15 * * * *', datetime(2026, 3, 25, 10, 30)))
# → True (minute 30 is divisible by 15)
Go
package main

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

func main() {
    // Parse a standard 5-field cron expression
    parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
    schedule, err := parser.Parse("0 9 * * 1-5")
    if err != nil {
        panic(err)
    }

    // Calculate the next 5 run times
    now := time.Now()
    for i := 0; i < 5; i++ {
        now = schedule.Next(now)
        fmt.Println(now)
    }
    // → next 5 weekday 09:00 timestamps
}
Bash (crontab)
# List current user's cron jobs
crontab -l

# Edit cron jobs interactively
crontab -e

# Add a job: run backup.sh every day at 2:30 AM
# (append to crontab via pipe)
(crontab -l 2>/dev/null; echo "30 2 * * * /home/user/backup.sh") | crontab -

# Check syntax with a dry-run parse (requires cronie or busybox)
# The system will reject invalid expressions when saving

# View cron logs on systemd-based Linux
journalctl -u cron --since "1 hour ago"

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

У чому різниця між 5-польовими і 6-польовими cron-виразами?
Стандартний (POSIX) формат cron має 5 полів: хвилина, година, день місяця, місяць, день тижня. Деякі інструменти, як-от Quartz Scheduler і Spring, додають поле секунд на початку, роблячи 6 полів. AWS EventBridge використовує 6 полів із полем року в кінці. Цей парсер підтримує стандартний 5-польовий формат, сумісний із crontab, GitHub Actions, Kubernetes CronJobs і більшістю бібліотек планування.
Як cron обробляє день місяця і день тижня разом?
Якщо обидва поля обмежені (не *), cron використовує логіку АБО: задача запускається, якщо виконується будь-яка з умов. Наприклад, 0 9 15 * 1 означає «о 9:00 15-го числа кожного місяця АБО щопонеділка». Це поширене джерело плутанини. Якщо обидва поля встановлено на *, задача запускається щодня.
Який часовий пояс використовує cron?
Традиційний crontab запускається в локальному часовому поясі системи. Kubernetes CronJobs за замовчуванням використовують часовий пояс kube-controller-manager (зазвичай UTC), але підтримують необов'язкове поле .spec.timeZone починаючи з Kubernetes 1.25. AWS EventBridge і Google Cloud Scheduler дозволяють вказати часовий пояс для кожного розкладу. Завжди перевіряйте, який часовий пояс використовує ваш планувальник, перш ніж розгортати cron-задачу.
Чи може cron запускати задачу кожні 30 секунд?
Стандартний 5-польовий cron не підтримує планування з інтервалом менше хвилини. Найменший інтервал — одна хвилина (*/1 або *). Щоб запускати щось кожні 30 секунд, потрібен або 6-польовий cron із полем секунд (Quartz, Spring), або скрипт-обгортка, що чекає 30 секунд і запускається знову, або інший механізм планування, наприклад systemd-таймери з OnCalendar.
Чи є 0 тим самим, що 7, у полі дня тижня?
У більшості реалізацій cron і 0, і 7 позначають неділю. Ця домовленість походить від оригінального Unix cron. Однак деякі системи (Quartz) використовують 1 для неділі і 7 для суботи. POSIX визначає діапазон як 0–6, де 0 = неділя. Якщо ваш планувальник приймає іменовані дні (SUN, MON), використовуйте їх, щоб уникнути неоднозначності.
Що відбувається, якщо я вкажу день місяця, якого не існує?
Якщо ви запланували задачу на 31-е (0 0 31 * *), вона не запуститься в місяцях із менш ніж 31 днем. Cron не переносить виконання на наступний місяць. Лютий завжди буде пропущений, а також квітень, червень, вересень і листопад. Щоб запускатися в останній день кожного місяця, деякі реалізації cron підтримують модифікатор L (0 0 L * *), але стандартний POSIX cron цього не підтримує.
Як протестувати cron-вираз перед розгортанням?
Використовуйте онлайн-парсер, як цей, щоб переглянути наступні часи запуску та переконатися, що розклад відповідає вашим намірам. Для перевірки у продакшені більшість бібліотек cron надають функцію обчислення наступного запуску: cron-parser у Node.js, croniter у Python, robfig/cron у Go. Запустіть вираз через одну з них у своєму тестовому наборі, щоб перевірити наступні N часів виконання перед розгортанням.