Генератор crontab и конструктор cron-выражений
Создавайте, проверяйте и расшифровывайте cron-выражения в браузере. Предпросмотр запусков в локальном времени или UTC. POSIX 5 полей, пресеты, описание простым языком. Бесплатно и приватно.
На естественном языке
—
Ближайшие 5 запусков
Что такое cron-выражение?
Cron-выражение — это строка из пяти полей, определяющая повторяющееся расписание. Слева направо поля идут так: минута (0-59), час (0-23), день месяца (1-31), месяц (1-12) и день недели (0-6, где 0 и 7 оба означают воскресенье). Каждое поле принимает значение, список (`1,3,5`), диапазон (`1-5`), подстановочный знак (`*` — любое значение) или шаг (`*/15` — каждые 15). Сочетание полей точно определяет, когда сработает запланированная команда — например, `0 9 * * 1-5` читается так: «в минуту 0, в час 9, любой день месяца, любой месяц, день недели с понедельника по пятницу», а на простом языке — «по будням в 9:00».
Cron появился в Unix Version 7 в 1979 году, и пятипольная грамматика осталась практически неизменной более четырёх десятилетий — это свидетельство того, насколько удачно был спроектирован исходный синтаксис. Сегодня cron-выражения используются далеко за пределами файла Unix crontab: Kubernetes CronJobs, workflow-файлы GitHub Actions, правила AWS EventBridge, запланированные пайплайны GitLab CI, Cloudflare Workers Cron Triggers и serverless-платформы во всех облаках принимают одну и ту же грамматику из пяти полей. Один раз освоить cron — значит уметь планировать задачи в любой современной инфраструктуре.
Стандарт POSIX определяет пять операторов: `*` (любое значение), `,` (список значений), `-` (диапазон), `/` (шаг) и именованные токены для месяцев (JAN-DEC) и дней недели (SUN-SAT). Большинство реализаций также раскрывают пять распространённых сокращений: `@yearly` (`0 0 1 1 *`), `@monthly` (`0 0 1 * *`), `@weekly` (`0 0 * * 0`), `@daily` (`0 0 * * *`) и `@hourly` (`0 * * * *`). Планировщик Quartz (Java-библиотека) расширяет это опциональным полем секунд и дополнительными операторами (`?`, `L`, `W`, `#`) — полезно при работе с Java/Spring, но не переносимо в стандартный cron. Этот инструмент следует пятипольному стандарту POSIX, потому что это доминирующий вариант — именно его понимают ваш Linux-сервер, раннер GitHub Actions и кластер Kubernetes.
Одна особенность POSIX cron заслуживает отдельного внимания: когда оба поля — день месяца и день недели — ограничены (ни одно не равно `*`), расписание срабатывает, если совпадает ХОТЯ БЫ ОДНО условие — семантика OR, а не AND. Поэтому `0 0 1 * 5` запускается 1-го числа каждого месяца И каждую пятницу, а не только в пятницы, выпадающие на 1-е число. Это самый частый сюрприз cron; предпросмотр ближайших запусков в этом инструменте делает его очевидным, показывая реальные даты и время срабатывания расписания. Проверяйте перед деплоем.
Весь разбор и расчёт ближайших запусков выполняются полностью в браузере на JavaScript — никакие выражения, расписания или другие данные никогда не отправляются на сервер. Этот инструмент мгновенно разбирает любое стандартное POSIX cron-выражение с описанием на естественном языке и предпросмотром пяти запусков, с полной приватностью.
Cron-выражения тесно связаны с другими инструментами для разработчиков. Cron-задачи часто отлаживают, сверяя Unix timestamps с ожидаемым временем запуска, а сложные расписания нередко документируют как JSON-конфигурацию, которую можно проверить нашим форматировщиком JSON. Подробное руководство, охватывающее семантику OR, ловушки часовых поясов и распространённые варианты cron с примерами для Linux, Kubernetes и GitHub Actions, читайте в нашем справочнике по cron-расписаниям.
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) Ключевые возможности
Живой парсер POSIX из 5 полей
Строгий парсер по POSIX cron: минута (0-59), час (0-23), день месяца (1-31), месяц (1-12 или JAN-DEC), день недели (0-6 или SUN-SAT, при этом 7 тоже принимается как воскресенье). Поддерживаются все стандартные операторы (`*` `,` `-` `/`) и макросы (`@yearly` `@monthly` `@weekly` `@daily` `@hourly`).
Предпросмотр ближайших 5 запусков
Рассчитывает ближайшие пять моментов запуска от вашего текущего локального времени. Переключение между Local и UTC одним кликом — самый надёжный способ поймать сюрпризы с часовым поясом до того, как crontab уедет на сервер в другом регионе.
Описание на естественном языке
Каждое корректное выражение получает человекочитаемое объяснение: «Каждые 15 минут», «По будням в 9:00», «В 02:30 1-го числа в январе и июле». Делает код-ревью и передачу задач между членами команды простой — больше не нужно гадать, что на самом деле делает `*/5 9-17 * * 1-5`.
Сообщения об ошибках на уровне поля
Некорректные выражения мгновенно получают красную обратную связь с подсветкой проблемного поля и конкретной ошибкой: «Ошибка в поле минута: значение вне диапазона [0, 59]: "60"». Никаких больше тихих сбоев crontab, обнаруженных через три дня, когда отчёт так и не запустился.
Пресеты для распространённых расписаний
Одиннадцать пресетов в один клик покрывают расписания, которые действительно понадобятся: каждую минуту, каждые 5/15 минут, каждый час, ежедневно в полночь или в 9:00, по будням в 9:00, еженедельно по воскресеньям/понедельникам, 1-го числа каждого месяца и ежегодно. Выбрать, подстроить, отправить.
Поля-конструктор для каждой позиции
Не нужно запоминать порядок пяти полей — пять небольших полей с подписями «Минута», «Час», «День месяца», «Месяц», «День недели» позволяют редактировать по одной позиции за раз без потери значения и без перепутанного порядка. Полное выражение наверху пересобирается автоматически.
Семантика POSIX OR — как положено
Когда оба поля — день месяца и день недели — ограничены, срабатывает правило OR: `0 0 1 * 5` запускается каждое 1-е число И каждую пятницу. Предпросмотр ближайших запусков делает это видимым до деплоя — никаких больше неожиданных вызовов в выходные.
100% приватность в браузере
Cron-выражения — которые часто раскрывают временные характеристики инфраструктуры и внутренние паттерны планирования — никогда не покидают браузер. Никакие данные не передаются на сервер, без логирования, без аналитики. Это можно проверить во вкладке Network в браузере. Безопасно для рабочих расписаний и внутренних систем.
Сообщения об ошибках с учётом Quartz
Если вставить выражение Quartz с `?`, `L`, `W` или `#`, парсер объяснит «Quartz operators not supported — use POSIX syntax», чтобы было понятно: нужно переписать под cron, а не отлаживать тихий сбой. Расписания Quartz не работают в Linux cron.
Варианты cron и планировщики
Vixie cron (стандарт Linux)
POSIX из 5 полейСтандарт в большинстве дистрибутивов Linux. Строгий POSIX с расширением `CRON_TZ=` для явного часового пояса. Действует семантика OR между днём месяца и днём недели. Основная цель этого инструмента.
BSD cron
POSIX из 5 полейСтандарт в macOS и BSD-семействе. POSIX-совместим, с небольшими отличиями реализации от vixie cron; большинство выражений работают одинаково.
systemd-таймеры (OnCalendar)
calendar spec, не cronАльтернатива cron в Linux на базе systemd. Использует синтаксис `OnCalendar: 2026-*-* 09:00:00` — более читаемый для неповторяющихся расписаний, но не совместим с cron-выражениями.
Quartz Scheduler (Java/Spring)
6 или 7 полейДобавляет поле секунд (обязательное) и поле года (опциональное), плюс операторы `?`, `L`, `W`, `#`. Полезен для Java-приложений, но не переносим в Linux cron.
AWS EventBridge
6 полей в стиле Quartz с `?`Требует, чтобы день недели или день месяца был `?` (по соглашению Quartz), а не `*`, когда ограничено только одно поле. Выражения не переносятся напрямую в Linux cron.
Kubernetes CronJob
POSIX из 5 полей + поле timeZonePOSIX-расписание из 5 полей плюс поле `spec.timeZone` (1.27+). Чище, чем полагаться на часовой пояс хоста kubelet. Выражения переносятся напрямую из Linux cron.
GitHub Actions
POSIX из 5 полейВсегда работает в UTC. Тайминг best-effort — может пропускаться при высокой нагрузке. Избегайте интервалов короче 15 минут. Выражения переносятся напрямую из Linux cron.
Примеры cron-выражений
Каждые 15 минут
*/15 * * * *
Оператор шага: `*/15` в поле минут означает «каждые 15 минут начиная с минуты 0» — запуски в :00, :15, :30, :45 каждый час каждого дня. Самый распространённый интервал для опроса API, обновления кэшей и проверок доступности.
По будням в 9:00
0 9 * * 1-5
Диапазон `1-5` в поле дня недели означает с понедельника по пятницу (1=Пн, 5=Пт). Запуск ровно в 09:00 — удобно для отчётов в рабочее время, пакетных задач, зависящих от ночных данных, и напоминаний о ежедневных стендапах.
1-го числа каждого месяца в полночь
0 0 1 * *
День месяца `1`, все младшие поля — ноль. Часто используется для ежемесячного биллинга, ротации логов и сверок по итогам периода. День месяца и день недели считаются ограниченными только когда ни один из них не равен `*`; здесь день недели равен `*`, поэтому важен только день месяца.
Каждые 5 минут с 9:00 до 17:00 по будням
*/5 9-17 * * 1-5
Комбинирует шаг (`*/5`) с диапазоном (`9-17`) в разных полях. Полезно для мониторинга только в рабочие часы или разгрузки очередей. Итого: 12 запусков/час × 9 часов × 5 дней = 540 запусков за рабочую неделю.
Поквартально: 1-го января, апреля, июля и октября в полночь
0 0 1 JAN,APR,JUL,OCT *
Именованные месяцы через запятую. Квартальные расписания — финансовое закрытие, ревью code-freeze, аудит на соответствие требованиям. Можно смешивать имена и числа (`1,APR,7,10` разбирается так же), но для читаемости лучше придерживаться одного стиля.
Подводный камень POSIX OR: 1-е число месяца ИЛИ каждая пятница
0 0 1 * 5
Когда ОБА поля — день месяца (`1`) И день недели (`5`) — ограничены, POSIX cron запускает задание, если совпадает ХОТЯ БЫ ОДНО условие. Поэтому выражение срабатывает 1-го числа каждого месяца И каждую пятницу, а не только в пятницы, выпадающие на 1-е число. Это самый частый сюрприз cron; предпросмотр ближайших запусков делает его очевидным.
Каждый день в 02:30 (окно низкой нагрузки)
30 2 * * *
Конкретные значения для часа и минуты, подстановочные знаки в остальных полях. Окно 02:00-04:00 UTC де-факто стало стандартом для ночных пакетных задач, потому что не пересекается с рабочими часами ни одного крупного бизнес-региона. Сочетайте с переключением на UTC, чтобы убедиться, что запуск попадает туда, куда нужно.
Макроэквивалент: @daily
@daily
Сокращение `@daily` (а также `@midnight`) раскрывается в `0 0 * * *` — ежедневно в полночь. Остальные макросы: `@yearly` = `0 0 1 1 *`, `@monthly` = `0 0 1 * *`, `@weekly` = `0 0 * * 0`, `@hourly` = `0 * * * *`. Макросы лаконичны, но пятипольная форма более переносима между планировщиками (одни поддерживают макросы, другие нет).
Как составить cron-выражение
- 1
Введите или вставьте cron-выражение
Введите пятипольное cron-выражение в поле выше (например, `*/15 * * * *`). Инструмент разбирает и проверяет ввод на лету — зелёная галочка при корректном вводе, красная ошибка с названием поля при некорректном. Макросы вроде `@daily`, `@hourly` и других тоже принимаются.
- 2
Или подкрутите пять отдельных полей
Не нужно запоминать порядок полей — редактируйте Минуту, Час, День месяца, Месяц или День недели по отдельности через подписанные поля. Полное выражение наверху обновляется автоматически. Используйте `*` для подстановочных знаков, `*/N` для шагов, `a-b` для диапазонов и `1,3,5` для списков.
- 3
Выберите пресет для быстрого старта
Нажмите любой пресет (каждые 15 минут, по будням в 9:00 и т.д.), чтобы загрузить распространённое расписание, а затем подстройте поля под конкретную задачу. Одиннадцать пресетов покрывают паттерны, которые действительно встречаются в продакшене.
- 4
Проверьте предпросмотр ближайших запусков
Посмотрите на пять предстоящих дат и времён запуска — переключайтесь между Local и UTC, чтобы убедиться, что расписание срабатывает в нужный момент. Это самый надёжный способ поймать ловушку POSIX OR между днём месяца и днём недели до того, как она ударит в продакшене.
- 5
Скопируйте и вставьте в планировщик
Нажмите Copy, чтобы скопировать выражение. Вставьте в crontab, systemd-таймер, `cron:` в GitHub Actions, AWS EventBridge, `schedule` в Kubernetes CronJob или в любой совместимый с cron планировщик. Не забудьте проверить часовой пояс целевого планировщика — см. раздел «Лучшие практики» ниже.
Частые ошибки cron
Ловушка POSIX OR: оба поля дней ограничены
Когда ОБА поля — день месяца и день недели — ограничены, POSIX cron запускает задание, если совпадает ХОТЯ БЫ ОДНО условие, а не оба сразу. Поэтому `0 0 1 * 5` срабатывает 1-го числа каждого месяца И каждую пятницу, а не только в пятницы, выпадающие на 1-е. Поставьте `*` в одно из двух полей дней, когда нужно одно условие, или напишите скрипт-обёртку, делающий проверку AND.
# Задумано: «первая пятница месяца» 0 0 1-7 * 5 # На самом деле: срабатывает 1-7 числа месяца ИЛИ каждую пятницу — оба условия
# Обёртка для настоящей семантики AND 0 0 * * 5 [ $(date +\%d) -le 7 ] && /your-script # ИЛИ откажитесь от одного условия и примите более широкое расписание
Дрейф часового пояса между dev и prod
Cron-расписания на Linux-сервере используют системный часовой пояс, а не локальный пояс автора. 9:00 cron на сервере с UTC сработает в 4:00 утра по US East. Всегда проектируйте расписания относительно часового пояса целевого сервера — желательно UTC — и явно фиксируйте часовой пояс через `CRON_TZ=...` в начале crontab.
# Написано разработчиком в US East, развёрнуто на сервер с UTC 0 9 * * * /your-report.sh # Сработает в 9:00 UTC = 4:00 утра по US East — не то, что задумал разработчик
# Зафиксируйте часовой пояс или пишите явно в UTC CRON_TZ=America/New_York 0 9 * * * /your-report.sh
Путаница с оператором шага: '*/15' vs '15'
`*/15` в минутах означает «каждые 15 минут начиная с 0» (то есть 0, 15, 30, 45). Просто `15` означает «только в минуту 15» — один запуск в час. Новички часто пишут `15`, думая, что это каждые 15 минут; описание на естественном языке в инструменте делает ошибку очевидной до деплоя.
# Задумано: каждые 15 минут 15 * * * * # На самом деле: раз в час, в минуту 15 (на 4 запуска/час меньше, чем задумано)
# Правильно */15 * * * * # Каждые 15 минут: минуты 0, 15, 30, 45 каждого часа
Шестипольное выражение на POSIX-планировщике
Quartz/Spring/node-cron поддерживают опциональное поле секунд первым. Linux crontab, GitHub Actions, AWS EventBridge (в основном) и Kubernetes CronJob — НЕ поддерживают; они ожидают пять полей. Вставка шестипольного выражения молча ломает расписание: секунды становятся минутами, минуты — часами и так далее.
# Quartz из 6 полей скопирован в Linux crontab 0 0 9 * * 1-5 # Linux читает: минута=0, час=0, день месяца=9, месяц=*, день недели=1-5 # = полночь 9-го числа в месяцах, совпадающих с буднями — хаос
# POSIX из 5 полей, убираем секунды 0 9 * * 1-5 # = по будням в 9:00
День месяца вне диапазона для этого месяца
Cron не сверяет день месяца с реальным месяцем. `0 0 31 2 *` (31 февраля) парсится нормально, но никогда не совпадёт — в феврале максимум 29 дней. Новички полагают, что парсер это поймает; он не ловит. Предпросмотр ближайших запусков показывает «Нет ближайших запусков», когда выражение структурно корректно, но логически невозможно.
# 30 или 31 февраля — никогда не запустится 0 0 30 2 * 0 0 31 2 * # Парсится, но расписание не сработает никогда
# Используйте паттерн «последний рабочий день февраля» через скрипт 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /your-script
Перепутали синтаксис Quartz и POSIX
Документация AWS, туториалы по Spring и многие ответы на Stack Overflow показывают cron-выражения Quartz с `?`, `L`, `W` или `#`. Они не работают в Linux crontab. Если скопировать шестипольное выражение с `?` в позиции дня недели, Linux-парсер либо его отклонит, либо, что хуже, молча неправильно разберёт. Этот инструмент ловит операторы Quartz и объясняет разницу.
# Quartz: «последняя пятница месяца» — невалидно в POSIX 0 0 ? * 6L *
# Подход с обёрткой POSIX для последней пятницы 0 0 25-31 * 5 /your-script # Запуск в пятницу между 25-31 числом любого месяца
Типичные сценарии
- Задачи в Linux crontab
- Создавайте и проверяйте записи для `/etc/crontab`, `/etc/cron.d/*` или пользовательских файлов `crontab -e`. Используйте предпросмотр ближайших запусков, чтобы убедиться, что расписание попадает в нужное время в часовом поясе сервера, до сохранения.
- Расписания Kubernetes CronJob
- Сгенерируйте поле `spec.schedule` для Kubernetes CronJob. Kubernetes 1.27+ также поддерживает `spec.timeZone` — используйте переключатель UTC, чтобы спроектировать расписание в UTC, а затем явно задайте `timeZone`, чтобы не зависеть от локального времени рабочего узла.
- Запланированные workflow GitHub Actions
- Создайте запись `cron:` под `on.schedule`. GitHub Actions всегда работает в UTC — переключите предпросмотр на UTC, чтобы убедиться в расписании. Избегайте интервалов короче 15 минут; планировщик GitHub пропускает короткие интервалы при высокой нагрузке.
- Правила AWS EventBridge
- Соберите cron-выражение для запланированного правила EventBridge. Учтите: AWS использует шестипольный синтаксис в стиле Quartz с `?` для дня недели — этот инструмент выдаёт пятипольный POSIX, который нужно сконвертировать, добавив секунды (`0`) и заменив `*` в одном из полей дня на `?`.
- Запланированные пайплайны GitLab CI
- Проверяйте cron-выражение для запланированного CI-пайплайна в GitLab. GitLab использует пятипольный синтаксис POSIX — именно то, что выдаёт этот инструмент, — и UI-выбор даты, но cron-форма даёт более тонкий контроль для нестандартных интервалов.
- Cloudflare Workers Cron Triggers
- Создайте запись `[triggers.crons]` в `wrangler.toml`. Cloudflare использует пятипольный синтаксис POSIX. Минимальный интервал — одна минута; воркер работает в UTC. Используйте предпросмотр, чтобы убедиться, что триггер срабатывает в ожидаемом окне.
- Расписания Node.js node-cron
- Создавайте выражения для библиотеки `node-cron`, которая поддерживает как пятипольный POSIX, так и опциональное ведущее поле секунд. Придерживайтесь пяти полей, если конкретно не нужна точность меньше минуты — шестипольные выражения не переносятся в Linux crontab.
- Код-ревью и документация
- Вставьте cron-выражение из PR или runbook, чтобы мгновенно увидеть, что оно делает — больше не нужно гадать над `30 7 * * 1-5` или доставать справочную карту. Описание на естественном языке также отлично подходит для inline-комментариев и README.
Справочник по синтаксису cron
- Порядок полей: М Ч Д М Н
- Минута (0-59), Час (0-23), День месяца (1-31), Месяц (1-12), День недели (0-6, при этом 7 тоже = воскресенье). Поле дня недели принимает и числа (0-6), и имена (SUN-SAT, без учёта регистра).
- Операторы
- `*` = любое значение; `,` = разделитель списка (`1,3,5`); `-` = диапазон (`1-5`); `/` = шаг (`*/15`, `5/10`); имена: JAN-DEC для месяца, SUN-SAT для дня недели (без учёта регистра).
- Макросы (псевдонимы)
- `@yearly` = `0 0 1 1 *`; `@annually` = `0 0 1 1 *`; `@monthly` = `0 0 1 * *`; `@weekly` = `0 0 * * 0`; `@daily` = `0 0 * * *`; `@midnight` = `0 0 * * *`; `@hourly` = `0 * * * *`. `@reboot` — особый случай (запуск только при загрузке), а не расписание; он отклоняется с пояснительной ошибкой.
- Семантика POSIX для дней (правило OR)
- Когда ОБА поля — день месяца и день недели — ограничены (ни одно не равно `*`), расписание срабатывает, если совпадает ХОТЯ БЫ ОДНО условие — семантика OR. Когда ограничено только одно, оно и решает. Когда оба равны `*`, подходит любой день. Правило OR работает в vixie cron, BSD cron и большинстве POSIX-реализаций; Quartz использует `?`, чтобы разводить AND и OR.
- Шестипольный режим (Quartz-Lite)
- Если ввод содержит шесть токенов через пробел, инструмент трактует первый как поле секунд (0-59). Полезно для Quartz, Spring `@Scheduled(cron=...)` и node-cron. НЕ переносимо в Linux crontab и POSIX-планировщики — они воспримут секунды как минуты и сдвинут всё на одну позицию.
- Привязка оператора шага
- `*/N` привязан к наименьшему значению поля: `*/15` в минуте = `0,15,30,45`, а не «каждые 15 начиная с сейчас». С базой, отличной от подстановочного знака: `5/15` в минуте = `5,20,35,50`. Шаги, не делящие диапазон поля нацело, пропускают значения у границы — это корректно, а не баг.
- Границы валидации
- минута ∈ [0,59], час ∈ [0,23], день месяца ∈ [1,31], месяц ∈ [1,12], день недели ∈ [0,7]. Значения вне диапазона дают ошибку на уровне поля. День месяца НЕ сверяется с месяцем (`0 0 31 2 *` парсится нормально, но никогда не совпадёт, поскольку в феврале нет 31-го дня — предпросмотр покажет «Нет ближайших запусков»).
- Операторы Quartz отклоняются
- POSIX cron не поддерживает Quartz-операторы `?` (без конкретного значения), `L` (last), `W` (ближайший рабочий день) и `#` (n-й день недели). Этот инструмент отклоняет их с понятным сообщением «Quartz operators not supported», а не молча трактует как невалидный POSIX. Для расписаний Quartz используйте инструмент с поддержкой Quartz или планировщик Spring.
- Ограничение поиска ближайших запусков по годам
- Поиск ближайших запусков ведётся максимум на 4 года вперёд; выражения, совпадающие реже (например, паттерны «29 февраля»), покажут «Нет ближайших запусков в течение 4 лет». Это сделано намеренно, чтобы избежать бесконечной итерации для невозможных паттернов.
Лучшие практики для cron-расписаний
- Используйте UTC на серверах, конвертируйте при отображении
- Настройте серверы на UTC (`/etc/timezone` или `TZ=UTC`) и пишите все cron-выражения в UTC. Конвертируйте в локальное время только при отображении в дашбордах и отчётах. Это исключает целый класс багов с часовыми поясами, особенно болезненных при переходах на летнее время, когда расписания в локальном времени тихо дублируются или пропускают запуск. Используйте переключатель UTC в этом инструменте, чтобы проектировать расписание в UTC с самого начала.
- Избегайте ловушки POSIX OR между днём месяца и днём недели
- Никогда не ограничивайте одновременно день месяца И день недели, если только не нужна семантика OR. Если нужен «каждый понедельник в январе», пишите `0 0 * 1 1` (день месяца — `*`); если нужно «1-е число каждого месяца», пишите `0 0 1 * *` (день недели — `*`). Правило POSIX OR означает, что `0 0 1 * 1` сработает 1-го числа И каждый понедельник — почти наверняка не то, что задумано. Предпросмотр ближайших запусков поймает это, если проверять перед деплоем.
- Явно фиксируйте часовой пояс расписания
- Современные планировщики поддерживают фиксацию часового пояса в определении расписания: `CRON_TZ=America/New_York` в начале crontab (vixie cron 3.0+), `spec.timeZone: "America/New_York"` для Kubernetes CronJobs 1.27+, выражение расписания с `ScheduleExpressionTimezone` для AWS EventBridge Scheduler. Фиксируйте часовой пояс явно, а не полагайтесь на настройки сервера — часовые пояса серверов могут меняться без предупреждения во время инфраструктурных миграций.
- Распределяйте нагрузку по минутам, а не на :00
- Избегайте `0 * * * *` (каждый час в минуту 0) для некритичных задач — на большом масштабе планирование множества заданий ровно на :00 создаёт всплески нагрузки. Подбирайте случайное смещение по минутам (`23 * * * *`, `41 * * * *`) для каждой задачи, чтобы распределить нагрузку. То же касается ежедневных задач: `30 3 * * *` дружелюбнее к вашей базе данных, чем `0 3 * * *`, когда множество заданий сходится к 3:00.
- Делайте задания идемпотентными
- У cron нет встроенного повтора, нет предотвращения пересечений, нет восстановления пропущенных запусков. Задание должно быть безопасно для повторного выполнения (идемпотентным) и проверять само себя. Вместо «отправить отчёт в 9:00» проектируйте как «отправить сегодняшний отчёт, если ещё не отправлен» — это самовосстанавливается после простоя, случайных двойных расписаний и параллельных запусков. Идемпотентность — это свойство задания, а не планировщика, и это самая важная практика надёжности.
- Добавляйте heartbeat для критичных расписаний
- Тихий отказ — главное слабое место cron: если расписание не сработало, никто об этом не сообщит. Для критичных задач пусть задание отправляет heartbeat в сервис мониторинга (Healthchecks.io, Cronitor, Dead Man's Snitch) в конце каждого запуска; сервис уведомит, если ожидаемый ping не пришёл. Это ловит и сбой задания, и сбой самого расписания. Бесплатного тарифа хватает большинству личных и малых команд.
- Проверяйте через предпросмотр ближайших запусков перед отправкой
- Перед деплоем нового cron-расписания посмотрите на пять предстоящих дат и времён в предпросмотре этого инструмента. Переключайтесь между Local и UTC. Убедитесь, что расписание попадает туда, куда задумано — не на пять минут раньше, не в неправильный день, не пропуская выходные, которые важны. Предпросмотр — самый дешёвый возможный тест в продакшене.
Часто задаваемые вопросы
Что делает этот инструмент?
Что такое cron-выражение?
Загружаются ли мои данные куда-либо?
В чём разница между POSIX cron и Quartz?
Почему '0 0 1 * 5' запускается каждую пятницу И 1-го числа?
Как запускать задачу каждые 30 секунд?
В каком часовом поясе работает cron?
Во что фактически раскрывается '*/15'?
Можно ли использовать шестипольное выражение с секундами?
Какой максимальный интервал может выразить cron?
Как обрабатывать пропущенные запуски после простоя?
Почему мой cron в GitHub Actions запускается не вовремя?
Похожие инструменты
Все инструменты →Конвертер Unix timestamp и epoch — multi-precision
Дата и время
Преобразование Unix timestamp в дату мгновенно. Автоопределение секунд, миллисекунд и микросекунд. Живые часы, двунаправленно. Бесплатно и приватно.
Конвертер систем счисления — bin, hex, dec, oct
Конвертеры
Конвертация между системами счисления — двоичной, hex, десятичной, восьмеричной и любой базой 2-36 мгновенно. Бесплатно, приватно — вся обработка в браузере.
Base64 декодер и кодировщик
Кодирование и форматирование
Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.
Конвертер CSV в JSON
Кодирование и форматирование
Конвертируйте CSV в JSON в браузере. RFC 4180, определение типов, заголовок, безопасность больших целых. 100% приватно, без загрузки.
Сжатие изображений онлайн — JPEG, PNG и WebP
Конвертеры
Сжимайте JPEG, PNG и WebP до 80% меньше — в браузере, без загрузки. Batch до 20 изображений, регулировка качества, сравнение «до и после». Бесплатно и приватно.
JSON Diff и сравнение
Кодирование и форматирование
Сравнивайте два JSON-файла мгновенно в браузере. Side-by-side подсветка, вывод JSON Patch (RFC 6902), игнорирование шума вроде timestamp и ID. 100% приватно, без загрузки.