Синтаксис Cron-выражений: полное руководство с примерами
Синтаксис 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-выражений для проверки синтаксиса, предварительного просмотра предстоящих моментов выполнения и выявления ошибок до того, как они повлияют на рабочую среду. Тридцатисекундная проверка предотвращает незаметные сбои расписания.