Как пользоваться
- В конструкторе слева для каждого поля (минуты, часы, день месяца, месяц, день недели) выберите режим: каждый, конкретные значения чипами, диапазон или каждые N.
- Выражение соберётся справа само; его можно править руками — конструктор подстроится, а ошибка подсветится с указанием поля и допустимого диапазона.
- Прочитайте расшифровку по-русски и проверьте список из 10 ближайших запусков — переключите зону на Europe/Moscow или UTC, если сервер живёт не в вашем поясе.
- Готовые пресеты (каждые 5 минут, будни в 09:00, воскресенье 04:30) подставляются одним нажатием; результат — Копировать в crontab.
Формат crontab: пять полей
Классическое cron-выражение состоит из пяти полей через пробел: минута час день-месяца месяц день-недели. В каждом поле допустимы * (любое значение), список через запятую 1,15, диапазон 9-18, шаг */5 или 0-30/10, а для месяцев и дней недели — трёхбуквенные имена JAN–DEC и SUN–SAT. Воскресенье записывается как 0 или 7. Инструмент понимает и сокращения @hourly, @daily, @weekly, @monthly, @yearly, @reboot.
Тонкость, о которую спотыкаются чаще всего: если заданы и день месяца, и день недели (оба не *), задание сработает, когда совпадёт любое из условий, а не оба сразу. 0 9 1 * 1 — это «в 09:00 первого числа и по всем понедельникам», а не «в первый понедельник месяца». Расшифровка показывает это явно.
Как считаются следующие запуски
Ближайшие 10 запусков вычисляются честно — перебором минут от текущего момента с проверкой каждого поля, а не по формуле. Дата и время показываются в выбранной зоне: локальной зоне браузера, Europe/Moscow или UTC. Это важно, потому что crontab исполняется в зоне сервера: задание «в 03:00» на машине в UTC у московского пользователя сработает в 06:00. Поиск ограничен пятью годами вперёд — если за это время совпадений нет (например, 0 0 31 2 *), инструмент так и скажет.
Где ещё пригодится
- Laravel:
$schedule->command('stats:pull')->cron('*/15 * * * *')— те же пять полей, зона задаётся через->timezone(). - GitHub Actions:
on: schedule: - cron: '0 3 * * 1-5'— пять полей, всегда UTC, минимальный интервал 5 минут. - Kubernetes CronJob, systemd timers (через
OnCalendar, но синтаксис другой), панели хостингов и трекеры с планировщиком постбэков. - Внимание: Quartz (Java), Spring и часть облачных планировщиков используют шесть или семь полей — первое из них секунды. Такое выражение сюда не подойдёт: уберите поле секунд или добавьте его при переносе.
Частые расписания
| Выражение | Смысл |
|---|---|
*/5 * * * * | каждые 5 минут — опрос API партнёрки, синк статистики |
0 * * * * | каждый час ровно — агрегация кликов |
0 3 * * * | ежедневно в 03:00 — бэкапы, очистка логов |
0 9 * * 1-5 | по будням в 09:00 — утренний отчёт в Telegram |
30 4 * * 0 | воскресенье 04:30 — тяжёлые пересчёты за неделю |
0 0 1 * * | первого числа в полночь — закрытие месяца, инвойсы |
Частые вопросы
Как написать cron каждые 5 минут?
*/5 * * * *. Косая черта задаёт шаг: «каждая пятая минута начиная с нулевой». Аналогично каждые 2 часа — 0 */2 * * *, каждые 30 минут — */30 * * * *.
Как сделать cron по будням в 9 утра?
0 9 * * 1-5: минута 0, час 9, любой день месяца, любой месяц, дни недели с понедельника (1) по пятницу (5). Имена тоже допустимы: 0 9 * * MON-FRI.
Что означает звёздочка в cron-выражении?
Любое допустимое значение поля. * * * * * — каждую минуту. Звёздочка в поле дня недели вместе с конкретным днём месяца означает «день недели не ограничен».
Почему cron не запустился в указанное время?
Чаще всего дело в часовом поясе сервера (проверьте date и TZ), в шести полях вместо пяти или в том, что день месяца и день недели заданы одновременно и работают через ИЛИ. Список следующих запусков в нужной зоне помогает увидеть расхождение.
Можно ли задать cron на 30 секунд?
В стандартном crontab минимальный шаг — одна минута. Секунды есть только в 6-полевых форматах (Quartz, некоторые библиотеки), либо задание запускают дважды: * * * * * cmd и * * * * * sleep 30; cmd.
Считаются ли следующие запуски с учётом летнего времени?
Да, для локальной зоны и любых зон с переходами используются данные браузера (IANA tzdata). В Europe/Moscow и UTC переходов нет — там время просто плюс три часа и ноль соответственно.