Перейти к основному содержимому
LibraTool logoLibraTool

Конструктор cron-выражений — бесплатно

Создавайте, проверяйте и объясняйте cron-выражения для запланированных задач. Описание на понятном языке, предпросмотр следующих 5 запусков и пресеты распространённых шаблонов.

Работает офлайн после загрузки
минута
(0-59)
час
(0-23)
день
(1-31)
месяц
(1-12)
день недели
(0-7)

Простым языком

В 09:00, С понедельника по пятницу.

Типовые шаблоны

Совместим со стандартным Unix cron, GitHub Actions, Kubernetes CronJob и большинством систем планирования. Используйте * для «каждый», */5 для «каждые 5», 1-5 для диапазонов, 1,15 для конкретных значений. Также поддерживает @hourly, @daily, @weekly, @monthly, @yearly и имена вроде MON-FRI или JAN-DEC.

Частые применения

  • Создание Cron для рабочих процессов GitHub ActionsGitHub Actions использует синтаксис cron для запланированных рабочих процессов. Создайте и проверьте свое расписание здесь.
  • Создание Cron для Kubernetes CronJobsРесурсы Kubernetes CronJob используют стандартный синтаксис cron. Создавайте и визуально объясняйте выражение.
  • Создание записей Cron для Linux crontabСоздавайте выражения для традиционного Unix cron (cron, crontab -e) с уверенностью.
  • Планирование задач обслуживания базы данныхПланируйте резервное копирование, вакуум или задачи анализа с уверенностью, используя выражения cron.
  • Узнайте, как работают выражения CronКаждая корректировка показывает мгновенное объяснение на простом английском языке и предпросмотр следующих 5 прогонов — лучший способ изучить cron.

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

Конструктор выражений cron полностью работает в вашем браузере с использованием написанного вручную парсера в lib/cron.ts — без внешней библиотеки, без обращения к серверу. Он проверяет выражение, собирает описание простым языком с использованием встроенных API Intl.DateTimeFormat и Intl.ListFormat браузера для названий дней и месяцев с учётом локали и вычисляет следующие запланированные времена запуска, продвигаясь вперёд по времени с пропуском полей, а не перебором каждой минуты.

  1. 1
    Выражение разбирается поле за полем
    Парсер разбивает выражение на пять (или шесть) разделённых пробелами полей и токенизирует каждое на запятые, диапазоны (например, 1-5), обозначение шага (например, */15) и именованные значения, такие как MON или JAN. @макросы, такие как @daily, разворачиваются в их пятиполевые эквиваленты перед началом парсинга. Недопустимые значения или числа вне диапазона появляются как типизированные ключи ошибок, сопоставляемые с локализованными сообщениями.
  2. 2
    Собрано человекочитаемое описание
    describeCron() в lib/cron.ts строит английское (или локализованное) предложение, изучая, какие поля являются подстановочными знаками, а какие — явными наборами. Названия дней и месяцев разрешаются через Intl.DateTimeFormat с активной локалью, а элементы списка объединяются с помощью Intl.ListFormat, так что союз («и» против «,» против формы, специфичной для локали) соответствует языку пользователя.
  3. 3
    Следующие времена запуска вычисляются с пропуском полей
    nextRuns() продвигает объект Date вперёд от текущего момента, но пропускает целые месяцы, дни или часы, которые не могут совпасть, вместо тестирования каждой минуты. Это означает, что невозможное расписание вроде 30 февраля быстро завершается через проверку пятилетнего горизонта, а не циклом 2,6 миллиона раз.
  4. 4
    Выражение передаётся через фрагмент URL
    Любое введённое вами выражение записывается в фрагмент URL страницы как #expr= (с задержкой 500 мс через window.history.replaceState). Фрагмент никогда не отправляется на сервер; страница гидратируется из него при загрузке, так что обмен или добавление URL в закладки восстанавливает точное выражение без какого-либо состояния сервера.

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

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