Блог
Русский

Расшифровка cron-выражений онлайн — описание и ближайшие запуски

Расшифровка cron-выражений из 5/6 полей, 5 ближайших запусков и часовые пояса

Работает в браузере · файлы никуда не загружаются

Загрузить пример

Форма из 5 полей: минута, час, день, месяц, день недели · Форма из 6 полей: секунда, минута, час, день, месяц, день недели

Каждые 5 минут

Простыми словами

Каждые 5 минут

Ближайшие запуски: 5

    Что это за инструмент

    Короткое cron-выражение вроде */5 * * * * непонятно даже тому, кто сам написал его несколько месяцев назад. Введите его здесь, и оно будет расшифровано одним предложением, а пять ближайших реальных запусков будут рассчитаны для выбранного часового пояса. Описание формирует библиотека с открытым кодом cronstrue.

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

    1. Введите cron-выражение или нажмите кнопку с примером. Работают и форма из 5 полей, и форма из 6 полей с секундами.
    2. Прочитайте расшифровку в блоке «Простыми словами».
    3. Выберите часовой пояс — 5 ближайших запусков пересчитаются для него. По умолчанию используется пояс браузера.
    4. Если вы используете алиас вроде @daily, рядом показывается стандартное выражение, которое он означает.

    Как это работает

    • Порядок полей: пять полей — минута (0-59), час (0-23), день (1-31), месяц (1-12), день недели (0-7); в шести полях спереди добавляются секунды (0-59). День недели 0 и 7 — это воскресенье, 1 — понедельник (Unix cron и Spring), в отличие от Quartz, где 1 — воскресенье.
    • В поле можно использовать *, число, диапазон a-b, список a,b и шаги */n, a-b/n или a/n. Месяц и день недели принимают также английские сокращения вроде JAN и MON. В дне месяца и дне недели ? трактуется как *.
    • Алиасы: @yearly (0 0 1 1 *), @monthly (0 0 1 * *), @weekly (0 0 * * 0), @daily (0 0 * * *) и @hourly (0 * * * *).
    • Если ни день месяца, ни день недели не равны *, запуск происходит при совпадении любого из них.
    • Ближайшие запуски ищутся по часам выбранного пояса поле за полем, не дальше чем на 8 лет вперед. Для даты, которая никогда не наступит, например 30 февраля, выводится сообщение.
    • Для некорректного выражения указывается, в каком поле и какое значение вызывает проблему.

    Примеры

    Выражение Значение
    */5 * * * * Каждые 5 минут
    0 9 * * 1-5 В 09:00 по будням
    0 0 9 * * 1-5 Шесть полей: в 09:00:00 по будням
    30 2 1 * * В 02:30 первого числа каждого месяца

    Полезно знать

    • Если сервер работает в другом поясе, чем ваш браузер, реальное время запусков тоже будет другим, поэтому при проверке выбирайте пояс сервера.
    • Для частых выражений вроде «каждую минуту» или «каждую секунду» пять ближайших запусков просто идут подряд.

    Частые вопросы

    Чем отличаются 5 и 6 полей?

    Пять полей — это минута, час, день, месяц, день недели; в шести полях первыми идут секунды: секунда, минута, час, день, месяц, день недели. Linux crontab использует пять полей, а @Scheduled в Spring — шесть. Инструмент различает их по количеству полей. Дни недели нумеруются как в Unix cron и Spring: 0 и 7 — воскресенье, 1 — понедельник. В Quartz 1 — воскресенье, 7 — суббота, поэтому для выражения из 6 полей с ? и числовым днем недели выводится предупреждение.

    Понимает ли инструмент выражения Quartz?

    Выражение из 6 полей с днями недели, записанными именами вроде MON или FRI, читается как есть. Числовые дни недели нумеруются иначе (в Quartz 1 — воскресенье, здесь 0 и 7 — воскресенье, 1 — понедельник), поэтому они сдвинутся на один день: используйте имена или вычтите 1. Если выражение для Spring, который тоже принимает ?, предупреждение можно не учитывать. Форма из 7 полей с годом в конце и обозначения L, W и # не поддерживаются.

    Что если заданы и день месяца, и день недели?

    Действуют классические правила cron — запуск происходит, если совпадает хотя бы одно из двух. Например, 0 0 13 * 5 означает полночь 13-го числа каждого месяца или любой пятницы. Если одно из полей — *, условием служит только другое.

    Как учитывается переход на летнее время?

    Время считается по местным часам выбранного пояса. Время, пропущенное при весеннем переводе часов, в этот день не срабатывает, а время, которое встречается дважды, срабатывает один раз — при первом появлении. Реальные планировщики могут вести себя иначе в зависимости от реализации.

    Поддерживаются ли расширения L, W и #?

    Нет. Понимаются числа, диапазоны (-), списки (,), шаги (/), * и ?, сокращения месяцев и дней недели (JAN, MON) и алиасы @hourly, @daily, @weekly, @monthly и @yearly. Все остальное выдается как ошибка.

    Не нашли нужный инструмент?