⏱️
← Назад к руководствам

Синтаксис Cron-выражений: полное руководство с примерами

· Теги: cron-syntax, crontab-format, cron-fields, cron-expression-guide, linux-automation

Синтаксис Cron-выражений

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

5-полевой формат

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

* * * * *
| | | | |
| | | | +----- День недели (0-7, 0 и 7 = воскресенье)
| | | +------- Месяц (1-12)
| | +--------- День месяца (1-31)
| +----------- Час (0-23)
+------------- Минута (0-59)

Подробности полей

| Поле | Диапазон | Спецсимволы | Пример | |-------|-------|-------------------|---------| | Минута | 0-59 | , - * / | 30 = на 30-й минуте | | Час | 0-23 | , - * / | 6 = в 6:00 | | День месяца | 1-31 | , - * / | 15 = 15-го числа | | Месяц | 1-12 | , - * / | 6 = в июне | | День недели | 0-7 | , - * / | 0 = в воскресенье |

Поле минуты определяет точную минуту выполнения: 30 * * * * запускается на 30-й минуте каждого часа. Поле часа задаёт время суток: 0 6 * * * запускается ежедневно в 6:00. День месяца ограничивает выполнение конкретными календарными датами: 0 0 15 * * запускается 15-го числа каждого месяца в полночь. Месяц ограничивает выполнение конкретными месяцами: 0 0 1 6 * запускается 1 июня. День недели определяет дни недели: 0 8 * * 1-5 запускается в 8:00 с понедельника по пятницу.

Важно: Дни 29-31 выполняются только в месяцах, в которых есть эти даты. В более коротких месяцах эти значения незаметно пропускаются.

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

| Символ | Название | Назначение | Пример | |------|------|---------|---------| | * | Звёздочка | Все возможные значения | * в минутах = каждую минуту | | , | Запятая | Список значений | 1,15,30 = минуты 1, 15, 30 | | - | Дефис | Диапазон | 9-17 = часы с 9 по 17 | | / | Слеш | Шаговые значения | */5 = каждые 5 минут |

Шаговые значения со слешем

Слеш означает «каждые N единиц»:

# Каждые 5 минут
*/5 * * * *

# Каждые 2 часа
0 */2 * * *

# Каждые 15 минут в рабочее время
*/15 9-17 * * *

Распространённые шаблоны Cron-расписаний

| Расписание | Выражение | Описание | |----------|------------|-------------| | Каждую минуту | * * * * * | Запускается 1440 раз в день | | Каждые 5 минут | */5 * * * * | Проверки работоспособности, мониторинг | | Каждый час | 0 * * * * | В начале каждого часа | | Дважды в день | 0 6,18 * * * | В 6:00 и 18:00 | | Ежедневно в полночь | 0 0 * * * | Классическое обслуживание | | Еженедельно в воскресенье | 0 0 * * 0 | Еженедельное обслуживание | | 1-е число месяца | 0 0 1 * * | Ежемесячные отчёты | | Будние дни в 9:00 | 0 9 * * 1-5 | Начало рабочего дня |

Нестандартные сокращения

Некоторые реализации cron поддерживают именованные сокращения: @yearly (1 января), @monthly (1-е число месяца), @weekly (воскресенье), @daily (полночь), @hourly и @reboot (однократный запуск при старте системы). Поддерживается Vixie cron, cronie и systemd-таймерами.

Распространённые ошибки

  • Одновременная установка дня месяца и дня недели создаёт условие ИЛИ — задача запускается при совпадении любого из них, что редко соответствует задуманному.
  • Cron использует системный часовой пояс. Задачи вблизи перехода на летнее/зимнее время могут выполниться дважды или не выполниться вовсе.
  • Всегда считайте пять полей. Четыре поля недействительны; шесть полей требуют расширенного синтаксиса cron.

Проверьте ваши Cron-выражения

Используйте валидатор cron-выражений для проверки синтаксиса, предварительного просмотра предстоящих моментов выполнения и выявления ошибок до того, как они повлияют на рабочую среду. Тридцатисекундная проверка предотвращает незаметные сбои расписания.

Синтаксис Cron-выражений: полное руководство с примерами - CoolTool