alltools.one
DevOps
2026-02-25
11 min
alltools.one Team
cronschedulingdevopsautomationlinux

Шпаргалка по Cron-выражениям — Планируйте задачи как профессионал

Cron — это основа автоматизации запланированных задач в Unix-подобных системах. Будь то ротация логов, выполнение резервных копий баз данных или запуск CI/CD-пайплайнов, cron-выражения определяют когда эти задачи выполняются. Синтаксис компактный, но мощный — и легко ошибиться, если угадываете.

Этот справочник охватывает каждую часть синтаксиса cron с практическими примерами, готовыми для копирования. Если вы хотите интерактивно создавать и проверять выражения, откройте Конструктор Cron-выражений рядом с этим руководством.

Синтаксис Cron: Пять полей

Стандартное cron-выражение состоит из пяти полей, разделённых пробелами:

┌───────────── минута (0–59)
│ ┌───────────── час (0–23)
│ │ ┌───────────── день месяца (1–31)
│ │ │ ┌───────────── месяц (1–12)
│ │ │ │ ┌───────────── день недели (0–7, где 0 и 7 = Воскресенье)
│ │ │ │ │
* * * * *

Каждое поле принимает конкретное значение, диапазон, список или подстановочный символ. Вместе пять полей определяют точное повторяющееся расписание.

ПолеДопустимые значенияСпециальные символы
Минута0–59* , - /
Час0–23* , - /
День месяца1–31* , - /
Месяц1–12* , - /
День недели0–7* , - /

Поля месяца и дня недели также принимают трёхбуквенные сокращения (JANDEC, SUNSAT) в большинстве реализаций.

Специальные символы

Понимание четырёх специальных символов раскрывает всю мощь cron:

Звёздочка * — «Каждый»

Соответствует каждому возможному значению для данного поля.

* * * * *    # Каждую минуту каждого часа каждого дня

Запятая , — «И»

Указывает список дискретных значений.

0 9,12,18 * * *    # В 9:00, 12:00 и 18:00 ежедневно

Дефис - — «До»

Определяет включающий диапазон.

0 9-17 * * *    # Каждый час с 9 до 17

Косая черта / — «Каждый n-й»

Устанавливает интервал шага от начала диапазона.

*/10 * * * *    # Каждые 10 минут (0, 10, 20, 30, 40, 50)

Можно комбинировать диапазон с шагом:

0 9-17/2 * * *    # Каждые 2 часа с 9 до 17 (9, 11, 13, 15, 17)

Типичные примеры расписаний Cron

Сохраните эту таблицу в закладках. Это расписания, которые вы будете использовать снова и снова.

РасписаниеВыражениеПояснение
Каждую минуту* * * * *Выполняется в начале каждой минуты
Каждые 5 минут*/5 * * * *Минуты 0, 5, 10, 15, …, 55
Каждые 15 минут*/15 * * * *Минуты 0, 15, 30, 45
Каждый час0 * * * *В 0-ю минуту каждого часа
Каждые 6 часов0 */6 * * *В 00:00, 06:00, 12:00, 18:00
Ежедневно в полночь0 0 * * *Раз в день в 00:00
Ежедневно в 3 часа ночи0 3 * * *Раз в день в 03:00
Каждый понедельник в 9 утра0 9 * * 1Еженедельно в понедельник в 09:00
Каждый будний день в 8 утра0 8 * * 1-5С понедельника по пятницу в 08:00
Каждые выходные в полдень0 12 * * 0,6Суббота и воскресенье в 12:00
Первое число каждого месяца0 0 1 * *Полночь 1-го числа каждого месяца
Каждый квартал (Янв, Апр, Июл, Окт)0 0 1 1,4,7,10 *Полночь 1-го числа квартальных месяцев
Каждые 15 мин в рабочее время*/15 9-17 * * 1-5Будни, 9–17, каждые 15 минут

Вставьте любое выражение в Конструктор Cron-выражений для визуализации следующих времён выполнения.

Продвинутые паттерны

Комбинирование списков и диапазонов

Поля принимают смешанный синтаксис. Для запуска задачи в 8 утра и 6 вечера по будням:

0 8,18 * * 1-5

Для указания конкретных месяцев с шагом:

0 0 1 1-12/3 *    # Каждые 3 месяца начиная с января (Янв, Апр, Июл, Окт)

День месяца vs. День недели

Когда оба поля — день месяца и день недели — установлены (не *), поведение зависит от реализации. В стандартном cron задача выполняется, если выполнено любое из условий — это отношение ИЛИ, а не И. Это застаёт многих врасплох.

0 0 15 * 1    # Выполняется 15-го числа И каждый понедельник — не «понедельник 15-го»

Запуск при загрузке

Хотя это не cron-выражение в строгом смысле, @reboot — широко поддерживаемое сокращение:

@reboot /usr/local/bin/start-service.sh

Другие распространённые сокращения:

СокращениеЭквивалент
@yearly0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily0 0 * * *
@hourly0 * * * *

Cron в разных средах

Синтаксис из пяти полей универсален, но способ настройки cron зависит от платформы.

Linux Crontab

Классика. Редактируйте пользовательский crontab командой crontab -e:

# Запуск резервного копирования каждый день в 2 часа ночи
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Системные cron-задачи в /etc/cron.d/ включают дополнительное поле пользователя:

0 2 * * * root /usr/local/bin/cleanup.sh

GitHub Actions

GitHub Actions использует тот же синтаксис из пяти полей в триггере schedule. Все времена — UTC.

on:
  schedule:
    - cron: '0 3 * * 1-5'   # Будни в 3 часа ночи UTC

Для детального изучения конфигурации YAML см. YAML для Kubernetes и YAML для Docker Compose.

Kubernetes CronJob

Kubernetes оборачивает cron-выражения в ресурс CronJob:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: report
              image: reporting:latest
              command: ["python", "generate_report.py"]
          restartPolicy: OnFailure

Kubernetes по умолчанию использует UTC. Начиная с v1.25, можно установить timeZone: "Europe/Moscow" в спецификации CronJob.

AWS CloudWatch (EventBridge)

AWS использует несколько отличающийся синтаксис с шестью полями (добавлены секунды) и обёртками rate() / cron():

cron(0 3 * * ? *)    # Ежедневно в 3 часа ночи UTC

Обратите внимание на символ ? — AWS требует его для дня месяца или дня недели, когда другое поле указано. Это отличается от стандартного cron.

Типичные ошибки

1. Путаница с часовыми поясами

Cron на Linux использует системный часовой пояс по умолчанию, но Kubernetes и GitHub Actions работают в UTC. Задача с расписанием 0 9 * * * сработает в 9 утра UTC, что соответствует 12:00 по московскому времени.

Всегда проверяйте, какой часовой пояс использует ваш планировщик. Для конвертации временных меток наше руководство Временная метка Unix — объяснение подробно описывает смещения UTC.

2. Пересекающиеся выполнения

Если задача выполняется дольше интервала между запусками, вы получите пересекающиеся экземпляры. Скрипт, работающий 8 минут при расписании */5 * * * *, будет накапливаться.

Решения:

  • Используйте файл блокировки (flock в Linux)
  • Установите concurrencyPolicy: Forbid в CronJob Kubernetes
  • Проверяйте наличие запущенных экземпляров в начале скрипта

3. Отсутствие вывода и отладка

Cron не захватывает stdout по умолчанию. Всегда перенаправляйте вывод:

*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1

Если cron-задача не выполняется, проверьте:

  • grep CRON /var/log/syslog для журналов выполнения
  • Права доступа к файлу скрипта
  • Переменную окружения PATH — у cron минимальный PATH по умолчанию

4. Ловушка «31-е число каждого месяца»

0 0 31 * *    # Выполняется только в месяцах с 31 днём

Это срабатывает в январе, марте, мае, июле, августе, октябре и декабре — но молча пропускает остальные пять месяцев. Если нужна задача на конец месяца, рассмотрите запуск 1-го числа с корректировкой логики скрипта или используйте инструмент с поддержкой семантики «последний день месяца».

5. Забытый перевод строки в конце crontab

Некоторые реализации cron требуют завершающего перевода строки в файле crontab. Если последняя запись не выполняется, добавьте пустую строку в конец.

Визуальное создание выражений

Запоминание синтаксиса работает для типичных паттернов, но сложные расписания проще создавать визуально. Конструктор Cron-выражений на alltools.one позволяет:

  • Выбирать значения для каждого поля через выпадающие списки
  • Видеть читаемое описание расписания
  • Просматривать ближайшие времена выполнения
  • Копировать итоговое выражение одним кликом

Работает полностью в браузере — данные не отправляются ни на какой сервер.

Карточка быстрого справочника

Скопируйте этот блок в документацию проекта или вики команды:

# ┌───── мин (0-59)
# │ ┌───── час (0-23)
# │ │ ┌───── день месяца (1-31)
# │ │ │ ┌───── месяц (1-12)
# │ │ │ │ ┌───── день недели (0-7, Вс=0 или 7)
# │ │ │ │ │
# * * * * *

*/5 * * * *        # Каждые 5 минут
0 * * * *          # Каждый час
0 0 * * *          # Ежедневно в полночь
0 9 * * 1-5        # Будни в 9 утра
0 0 1 * *          # Первое число месяца
*/15 9-17 * * 1-5  # Каждые 15 мин, рабочее время

Дополнительное чтение


Готовы создать своё следующее cron-выражение? Откройте Конструктор Cron-выражений и настройте расписание правильно с первого раза.

Published on 2026-02-25
Cron Expression Cheat Sheet — Schedule Like a Pro | alltools.one