Примеры Cron-выражений для популярных расписаний
Практические примеры Cron для запуска каждую минуту, каждые 5–15 минут, каждый час, ежедневно, по будням и ежемесячно с объяснением timezone, шагов и типичных ошибок.

Cron expression удобно изучать не как набор символов, а как календарные условия запуска. Для классического пяти-польного формата каждое выражение отвечает на вопрос: в какие минуты, часы, дни месяца, месяцы и дни недели команда должна быть запущена.
Ниже — практические примеры популярных расписаний с разбором и важными ограничениями.
Напоминание: пять полей Cron
минута час день_месяца месяц день_недели
Пример:
30 3 * * 1-5
— в 03:30 по будням в timezone, которую использует конкретная cron-реализация.
Подробнее о синтаксисе: Что такое cron expression и Как читать расписание Cron.
Каждую минуту
* * * * *
Cron проверяет выражения каждую минуту, поэтому такое правило совпадает на каждой минуте каждого часа.
Использовать его для тяжёлой задачи опасно: новый запуск может начаться до завершения предыдущего.
Каждые 5 минут
*/5 * * * *
Типичные моменты:
12:00
12:05
12:10
...
12:55
13:00
Шаг действует внутри минутного поля, а не отсчитывается от фактического завершения предыдущего запуска.

Каждые 15 минут
*/15 * * * *
Соответствует минутам:
00, 15, 30, 45
Каждый час
0 * * * *
Запуск на нулевой минуте каждого часа:
10:00
11:00
12:00
Каждый день в 03:00
0 3 * * *
Важно: «03:00» определяется timezone окружения cron.
Каждый день в 03:30
30 3 * * *
По будням в 09:00
0 9 * * 1-5
В Cronie/Vixie-подобных системах 1-5 обычно соответствует понедельнику–пятнице.
Каждый понедельник в 10:15
15 10 * * 1
В первый день каждого месяца
0 4 1 * *
— 04:00 первого числа месяца.
Ежемесячно в последний день: важное ограничение
В классическом пяти-польном cron нет универсального простого значения «последний день месяца», которое одинаково работает во всех реализациях.
Не переносите Quartz-синтаксис вроде L в системный cron без проверки: это другая диалектная модель.
Для такой задачи часто используют отдельную логику внутри команды или возможности конкретного scheduler.
Каждый январь 1-го числа в 00:00
0 0 1 1 *
Несколько запусков в день
0 9,13,18 * * *
Запуск ежедневно в:
09:00
13:00
18:00
Диапазон часов
0 8-18 * * *
На нулевой минуте каждого часа с 08:00 до 18:00 включительно.
Каждые два часа
0 */2 * * *
Обычно совпадает в:
00:00, 02:00, 04:00, ...
Почему */23 может вас удивить
В поле минут:
*/23 * * * *
получаются:
00, 23, 46
затем новый час снова начинается с 00.
То есть интервалы:
23 мин → 23 мин → 14 мин
Cron — календарный matcher, а не универсальный interval timer.
Комбинация day-of-month и day-of-week
В Cronie/Vixie-подобной семантике, если оба поля ограничены, задача может запускаться, когда совпадает хотя бы одно из них.
Пример:
30 4 1,15 * 5
может означать 04:30:
- 1-го числа;
- 15-го числа;
- каждую пятницу.

Это одна из причин всегда проверять документацию конкретной реализации.
System crontab и user crontab
Пользовательский crontab:
5 временных полей + команда
Системный файл может содержать:
5 временных полей + user + command
Не принимайте поле пользователя за часть расписания.
Timezone
Одно выражение:
0 9 * * *
может означать разные реальные моменты в UTC и локальной timezone.
Проверьте:
- timezone хоста;
- timezone container;
CRON_TZ, если реализация поддерживает;- настройки orchestrator;
- DST.
DST: пропущенные и повторные моменты
При переводе часов локальное время может:
- не существовать;
- встретиться дважды.
Для классического cron это может привести к пропущенному или повторному запуску. Для критичной финансовой или интеграционной задачи нужно отдельно решить, допустимо ли такое поведение.
Как проверить выражение без гадания
Сделайте три вещи:
- сформулируйте cron обычным языком;
- выпишите 5–10 ближайших ожидаемых запусков;
- сравните их с реальными логами scheduler.
Например:
15 2 * * 1-5
проверочная формулировка:
02:15 по будням
Cron не гарантирует успех задачи
Даже правильное расписание доказывает только ожидаемый момент старта.
cron schedule
→ expected start
→ процесс запущен
→ процесс завершён
→ success heartbeat

Если heartbeat не пришёл, возможны разные причины: задача не стартовала, зависла, завершилась с ошибкой или не отправила сигнал.
Примеры для типовых фоновых задач
Backup ночью
0 2 * * *
Если backup может выполняться дольше суток или пересекаться с новым запуском, одного расписания недостаточно — нужна защита от overlap.
Импорт каждые 10 минут
*/10 * * * *
Убедитесь, что средняя и максимальная длительность импорта меньше интервала или предусмотрена блокировка параллельного запуска.
Отчёт по понедельникам
0 8 * * 1
Очистка первого числа месяца
30 1 1 * *
Для destructive jobs обязательно проверяйте timezone, права и защиту от случайного повторного выполнения.
Как выбрать расписание для мониторинга heartbeat
Нужно знать:
ожидаемый старт
+ максимальная нормальная длительность
+ допустимая задержка
= крайний момент heartbeat
Если cron запускается в 03:00, а задача обычно занимает 10 минут и допустима задержка ещё 5 минут, heartbeat window должен учитывать это, а не ожидаться ровно в 03:00.
UpWatch можно использовать для heartbeat-контроля Cron и фоновых задач: отсутствие ожидаемого сигнала в заданное окно становится отдельным событием.
Типичные ошибки
- переносить Quartz expression в Linux cron;
- читать
*/Nкак бесконечный interval timer; - забывать timezone;
- игнорировать DST;
- считать DOM и DOW обязательным AND;
- запускать долгую задачу чаще её длительности;
- считать наличие cron entry доказательством успешного выполнения;
- не защищать destructive job от повторного запуска.
Практический чек-лист
- Определить конкретную cron-реализацию.
- Проверить число полей.
- Сформулировать расписание словами.
- Выписать ближайшие запуски.
- Проверить timezone.
- Проверить DST.
- Проверить DOM/DOW semantics.
- Проверить длительность задачи.
- Проверить overlap.
- Сравнить с реальными логами запусков.
- Для критичной задачи добавить heartbeat.
- Проверять не только старт, но и успешное завершение.
Источники и документация
Частые вопросы
Как запустить Cron каждые 5 минут?
В классическом пяти-польном cron обычно используют */5 * * * *. Шаг применяется внутри минутного поля.
Как запускать задачу каждый день в 03:00?
Выражение 0 3 * * * при условии, что вы понимаете timezone, в которой cron интерпретирует расписание.
Как настроить запуск по будням?
В Cronie/Vixie-подобном формате обычно используют день недели 1-5, например 0 9 * * 1-5 для 09:00 по будням.
Можно ли записать последний день месяца одинаково для всех Cron?
Нет. Классический пяти-польный cron не имеет универсального переносимого синтаксиса последнего дня месяца; расширения зависят от реализации.
Почему Cron-задача может выполниться дважды при переводе часов?
При DST локальное время может повториться. Поведение зависит от реализации, поэтому критичные расписания нужно проверять отдельно.
Связанные материалы

Что такое Cron и для чего он нужен
Как устроены Cron и crontab в Unix-подобных системах, из каких полей состоит расписание, какие задачи обычно автоматизируют и почему запуск вручную не гарантирует работу по расписанию.

Что такое cron expression
Как устроено классическое cron expression из пяти полей, что означают звёздочка, диапазоны, списки и шаги, как читать расписание и не ошибаться с day-of-month/day-of-week.

Как читать расписание Cron
Практическое руководство по чтению классического Cron: пять полей, *, списки, диапазоны и шаги, особенности day-of-month/day-of-week, timezone и переходы летнего времени.