ToolActToolAct

Генератор выражений Cron

Визуальный генератор и парсер выражений Cron для планирования задач

Cron 表达式
* * * ? * *
每秒钟执行
常用
字段设置
秒 (0-59)
分 (0-59)
时 (0-23)
日 (1-31)
月 (1-12)
周 (0-6)
最近 5 次执行时间
12026-07-04 00:00:00
22026-07-04 00:01:00
32026-07-04 00:02:00
42026-07-04 00:03:00
52026-07-04 00:04:00

Что такое выражение Cron?

Cron-выражение описывает повторяющееся время запуска запланированных задач. В зависимости от планировщика оно может содержать пять, шесть или семь полей: минуту, час, день месяца, месяц, день недели, дополнительные секунды и год. Звездочки, запятые, диапазоны, шаги, вопросительные знаки и специальные обозначения позволяют записывать правила вроде «каждые 5 минут», «по будням в 9» или «в последний день месяца». Инструмент помогает читать, проверять и просматривать ближайшие запуски, чтобы не угадывать расписание по памяти. Контекст важен: Linux cron, Quartz, облачные планировщики и фреймворки отличаются полями, часовыми поясами и синтаксисом. При совместном использовании нужно заранее прояснить входные данные, допущения и ожидаемый результат, чтобы вывод не поняли неверно.

Как использовать

Как использовать

  1. Выберите режим генерации или разбора
  2. Задайте поля времени (секунды, минуты, часы, день, месяц, день недели) через выпадающие списки
  3. Нажимайте на готовые шаблоны для быстрого заполнения типичных выражений
  4. В режиме генерации показывается выражение и 5 ближайших запусков
  5. В режиме разбора проверяется существующее выражение и показываются времена запуска

Символы синтаксиса

  • * — Все возможные значения
  • , — Перечисление нескольких значений (например, 1,3,5)
  • - — Диапазон (например, 1-5)
  • / — Шаг интервала (например, */5 означает каждые 5)
  • ? — Без определённого значения (для дня или дня недели)
  • L — Последний день месяца/недели
  • W — Ближайший рабочий день
  • # — N-й день недели (например, 2#3 = 3-й вторник)

Примечания для разработчиков

  • Используйте результат как быструю справку, а затем проверьте в реальном коде, сборке или API-контексте.
  • Учитывайте версии, диалекты, переменные окружения и принятые в проекте соглашения.

Важные замечания

  • Поля дня и дня недели не могут одновременно содержать значения; одно из них должно использовать ?
  • У каждого поля есть допустимый диапазон: минуты 0-59, часы 0-23
  • Порядок полей фиксирован: сек мин час день месяц день_недели год
  • День недели не зависит от регистра; MON и mon эквивалентны

Применение

Создание расписаний в стиле Quartz без заучивания полейИспользуйте визуальные элементы управления для сборки 6-польного выражения с секундами, минутами, часами, днём, месяцем и днём недели, включая диапазоны, шаги, последний день, рабочий день и паттерн N-го дня недели. Конструктор выражений работает полностью на клиенте, поэтому черновик расписания можно проверить по конфигурационному файлу проекта или JSON запланированных задач до коммита и пуша.
Разбор существующего выражения Cron перед деплоемВставьте 5-польное или 6-польное выражение, чтобы заполнить элементы управления и проверить, использует ли расписание секунды, день месяца, день недели или ? ожидаемым образом. Результат разбора показывает описание на человеческом языке и ближайшие запуски — это самый быстрый способ обнаружить расписание, срабатывающее в полночь, когда задача должна была выполняться в рабочие часы.
Проверка ближайших запусков на адекватностьПроверьте сгенерированное описание и пять ближайших запусков перед использованием выражения для задач, отчётов, бэкапов, напоминаний или серверных операций, перепланировать которые после деплоя затруднительно. Это помогает рано выловить ошибки в выборе дня недели и неожиданное поведение поля секунд. Расписание, привязанное к 0 0 0 29 2 ?, для 29 февраля молча пропустит каждый невисокосный год, поэтому предпросмотр разбора делает этот пробел видимым до подключения задачи в payroll или batch-closing.
Учитывайте различия между Linux cron и синтаксисом Quartz5-польное выражение работает в Linux cron и Unix-демонах; 6-польное с секундами — в Quartz, Spring и большинстве облачных планировщиков. Убедитесь в целевой системе перед сохранением, потому что одни и те же цифры означают разные расписания. Quartz также принимает сокращения вроде @hourly, @daily, @midnight, @weekly, @monthly, @yearly и @reboot, которые сворачиваются в фиксированные 5- или 6-польные выражения и удобны в аннотации @Scheduled Spring, но отвергаются классическим crond.
Проверьте обработку часового пояса перед деплоем задачиУточните, интерпретирует ли планировщик выражение Cron в серверном времени, UTC или именованной зоне вроде America/New_York, ведь задача, написанная по времени штаб-квартиры, может сработать на несколько часов позже на глобально развёрнутом воркере.

Технический принцип

Cron-выражение кодирует ноль или более ограничений по времени в полях фиксированного порядка. Классический Vixie/Bron (используемый Linux crond) содержит 5 полей: минута (0-59), час (0-23), день месяца (1-31), месяц (1-12 или JAN-DEC) и день недели (0-6 или SUN-SAT, где воскресенье = 0 по соглашению). Планировщик Quartz, получивший распространение благодаря Spring и библиотеке Egistix, добавляет начальное поле секунд для 6 полей и необязательное конечное поле года для 7. Каждое поле может принимать литеральное значение, список (1,3,5), диапазон (1-5), шаг (0/15 означает каждые 15 начиная с 0) или подстановочный символ *, который совпадает со всеми значениями. Знак вопроса ? — это сентинел, специфичный для Quartz, означающий «без определённого значения», и ДОЛЖЕН появляться ровно в одной из позиций — день месяца или день недели — когда другое содержит ограничение. Вычисление следующих N времён запуска использует жадный алгоритм прямого поиска: начинаем от контрольного момента (обычно текущее время), увеличиваем поле самого низкого уровня, не соответствующее ограничению, сбрасываем все поля более низкого уровня к минимуму и каскадируем на поля более высокого уровня при переполнении (например, минуты выше 59, часы выше 23). Это известно как итеративный метод Донована/Спунхура и работает за O(K x F), где K — количество кандидатов (обычно 5), а F — количество полей. Названия дней недели (MON, FRI и т.д.) приводятся к нижнему регистру и сопоставляются, а сокращения месяцев также принимаются. Специальный символ L в Quartz разрешается в последнее вхождение дня недели в месяце (например, 0 0 0 ? * 5L — последняя пятница), вычисляемое обратным отсчётом от последнего дня месяца до нужного дня недели. Символ W находит ближайший рабочий день (пн-пт) к заданному дню месяца, при необходимости переходя в соседний месяц. Обработка часовых поясов — самая частая ошибка конфигурации: выражение само не содержит метаданных о часовом поясе, поэтому одно и то же 0 0 9 * * ? срабатывает в разных смещениях UTC на серверах в America/New_York, Asia/Tokyo и UTC. Сокращения вроде @daily (0 0 0 * * ?), @hourly (0 0 * * * ?), @reboot (запуск один раз при старте демона, не временное выражение) и @weekly (0 0 0 ? * 1) раскрываются в эквивалентную 6-польную форму перед разбором. Распространённая ловушка — соединение дня месяца и дня недели: в классическом cron задача запускается при совпадении любого из них (логика ИЛИ), а некоторые новые диалекты переключаются на логику И. Выражение 0 0 0 15 * 5 означает «в полночь 15-го числа И каждую пятницу» в Vixie cron, а не «в полночь 15-го ИЛИ в пятницу», как думают многие новички. Проблема Y2038 не влияет на cron напрямую (он использует time_t), но любое встроенное устройство с 32-битным Unix crond переполнит знаковый 32-битный time_t 2038-01-19T03:14:07Z.

  • Классическое 5-польное: мин час день_мес мес день_нед; Quartz добавляет сек (6 полей) и опционально год (7 полей).
  • ? должно занимать одну из позиций день_мес/день_нед, когда другое содержит значение; * совпадает со всеми значениями в поле.
  • День месяца + день недели — это ИЛИ в Vixie cron, И в некоторых новых планировщиках — проверяйте перед развёртыванием.
  • L разрешается в последний день недели месяца: например, 0 0 0 ? * 5L = последняя пятница, вычисляется от длины месяца.
  • W находит ближайший рабочий день (пн-пт) к заданной дате; может переходить в соседний месяц.
  • Cron-выражение не содержит метаданных часового пояса: одно и то же выражение срабатывает во времени сервера, UTC или именованной зоне в зависимости от планировщика.
  • Y2038: 32-битный time_t переполняется 2038-01-19 03:14:07 UTC; crond на устаревших встроенных системах будет затронут.
  • Сокращения @hourly/@daily/@midnight/@weekly/@monthly/@yearly/@reboot раскрываются в эквивалентные 5- или 6-польные выражения.
  • Оператор шага / отсчитывает от крайнего левого значения: 2/3 по часам срабатывает в 2, 5, 8, 11, 14, 17, 20, 23.
  • Пятиитерационный жадный прямой поиск за O(KxF) для вычисления следующих N запусков от контрольного момента.

Примеры

Каждый день в полночь (ежедневный бэкап)

Expression : 0 0 * * *
Means      : В 00:00 каждый день
Next runs  : 2026-06-11 00:00, 2026-06-12 00:00, 2026-06-13 00:00
Use case   : Резервное копирование БД, генерация ежедневных отчётов

Каждые 15 минут (проверка работоспособности)

Expression : */15 * * * *
Means      : В минуты 0, 15, 30, 45 каждого часа
Next runs  : 14:00, 14:15, 14:30, 14:45, 15:00
Use case   : Health check API, опрос очередей, задачи синхронизации

По будням в 9:00 (уведомления в рабочее время)

Expression : 0 9 * * 1-5
Means      : 09:00 с понедельника по пятницу
Next runs  : Mon 09:00, Tue 09:00, Wed 09:00, Thu 09:00, Fri 09:00
Use case   : Напоминание о стендапе, ежедневный дайджест в Slack

Первого числа каждого месяца в 03:30 (ежемесячный биллинг)

Expression : 30 3 1 * *
Means      : 03:30 первого числа каждого месяца
Next runs  : Jul 1 03:30, Aug 1 03:30, Sep 1 03:30
Use case   : Ежемесячное выставление счетов, ротация логов, архивация

Каждое воскресенье в полночь (еженедельная очистка)

Expression : 0 0 * * 0
Means      : 00:00 каждое воскресенье (0 = воскресенье в Linux cron)
Next runs  : Sun 00:00, Sun 00:00, Sun 00:00
Use case   : Еженедельный отчёт по email, очистка кэша, переобучение

Quartz с секундами — каждые 30 секунд

Expression : */30 * * * * ?
Means      : Каждые 30 секунд (синтаксис Quartz из 6 полей)
Next runs  : 14:00:00, 14:00:30, 14:01:00, 14:01:30
Note       : День недели — ?, потому что день месяца — *. Используйте Quartz, а не Linux cron, для этого формата.

Часто задаваемые вопросы

Какие форматы cron поддерживаются?

Стандартный 5-полевой cron (минута час деньМесяца месяц деньНедели), 6-полевой с секундами (используется в Quartz, Spring и многих облачных планировщиках) и 7-полевой с опциональным годом. Страница позволяет выбрать формат и поясняет каждое поле по мере того, как вы собираете выражение.

Почему dayOfMonth и dayOfWeek — оба поля?

Стандартный cron трактует их как ИЛИ: «первый день месяца ИЛИ каждый понедельник» срабатывает по любому из условий. Чтобы объединить их через И, обычно нужен нестандартный синтаксис ? (Quartz) или обходной приём. Страница показывает ближайшие времена срабатывания, чтобы вы могли визуально проверить намерение.

Будет ли расписание реально выполняться в моей системе?

Нет — страница генерирует и валидирует выражение, но задача выполняется в вашем планировщике (Linux cron, GitHub Actions, Kubernetes CronJob, AWS EventBridge, Quartz и т.д.). Разные планировщики используют немного разные диалекты cron; выбирайте формат под целевую систему.

В каком часовом поясе работает расписание?

Стандартный Unix cron использует системный местный часовой пояс. Облачные планировщики различаются: AWS EventBridge по умолчанию использует UTC, GitHub Actions по умолчанию использует UTC, Kubernetes CronJob использует часовой пояс API-сервера. Читайте документацию своего планировщика и помните, что переходы DST могут запускать задачи в неожиданное время.

Как выразить «каждые 30 минут»?

*/30 * * * * (минута = 0,30; каждый час, день, месяц, день недели). Для «каждые 15 минут только в рабочее время»: */15 9-17 * * 1-5 (также ограничивает 9:00-17:00 пн-пт). Страница покажет ближайшие 5-10 срабатываний для подтверждения.

Можно ли использовать это для реальных продакшен-расписаний?

Страница только генерирует выражение; сама задача — на стороне вашего планировщика. Сначала протестируйте выражение пробным запуском (у большинства планировщиков есть опция «ручной запуск») и избегайте планирования задач на полночь (00:00), куда сходятся задачи многих систем и вызывают пики нагрузки.

Загружается ли что-либо куда-либо?

Нет. Выражение разбирается, и ближайшие времена срабатывания вычисляются в вашем браузере с помощью JavaScript-библиотеки cron.

Похожие инструменты

Инструмент преобразования меток времени

Бесплатный онлайн-конвертер Unix-меток времени в дату и обратно. Поддержка секунд, миллисекунд и нескольких часовых поясов — удобно для отладки и логов.

Калькулятор Разницы Дат

Бесплатный онлайн калькулятор разницы дат. Вычисляет дни, недели, месяцы, годы между двумя датами. Точные расчёты с отображением часов, минут, секунд.

Таймер обратного отсчета

Бесплатный онлайн-таймер обратного отсчёта: задайте целевое время, добавьте напоминание и следите за отсчётом с точностью до секунды для любых событий.

Справочник команд Git

Бесплатная онлайн-шпаргалка по командам Git: самые нужные команды с группировкой по категориям, поиском и фильтром для быстрого поиска подходящей команды.

Запрос HTTP-кодов состояния

Бесплатный онлайн-справочник кодов состояния HTTP: все стандартные коды от 1xx до 5xx с описанием. Поиск и фильтр по категориям для быстрого поиска кода.

Генератор UUID

Онлайн-инструмент для генерации UUID в соответствии со стандартом RFC 4122. Поддержка версий v1 и v4, пакетная генерация.