Формат выражения Cron
I. Базовая структура выражений Cron (со ссылками на авторитетные источники)
Стандартное выражение cron состоит из 5 полей времени и 1 поля команды в соответствии с соглашениями Unix и Linux. Согласно IEEE Std 1003.1-2017 (стандарт POSIX)[1] и документации Linux man 5 crontab[2], формат таков:
* * * * * command-to-execute
│ │ │ │ │
│ │ │ │ └── День недели (0-7, и 0, и 7 обозначают воскресенье)
│ │ │ └──── Месяц (1-12)
│ │ └────── День месяца (1-31)
│ └──────── Час (0-23)
└────────── Минута (0-59)
Примечания из авторитетных источников:
- Стандарт POSIX[1] определяет минимальную спецификацию совместимости, требуя поддержки символов
*, , и -.
- Реализации Linux-демона
cron (например, Cronie) расширяют функциональность значениями шага (/) и специальными строками (@daily и др.), подробнее в официальной документации[3].
II. Правила символов в полях времени
Каждое поле времени поддерживает следующие специальные символы:
| Символ |
Описание |
Пример |
* |
Соответствует любому значению |
* в минутах = каждую минуту |
, |
Задаёт несколько значений |
1,3,5 = минуты 1, 3 и 5 |
- |
Определяет диапазон |
10-15 = минуты с 10 по 15 |
/ |
Значения шага (интервал) |
*/5 в минутах = каждые 5 минут |
? |
«Нет конкретного значения» (только для ДМ/ДН) |
Используется для предотвращения конфликтов |
Современные реализации cron (например, Vixie cron и его производные) поддерживают более богатые синтаксические правила. Согласно документации IBM по Cron[4] и вики-проекту Cronie[3], широко поддерживаются следующие символы:
| Символ |
Описание |
Пример из официальной документации |
L |
Последний день (поддерживается некоторыми реализациями) |
0 0 L * * = выполнять в последний день каждого месяца[5] |
W |
Ближайший рабочий день (например, 15W = рабочий день, ближайший к 15-му) |
См. документацию Quartz Scheduler[6] (распространено в экосистеме Java) |
III. Происхождение предопределённых псевдонимов (@daily и др.)
Псевдонимы @daily, @weekly и подобные происходят из реализации cron Пола Викси (Vixie cron, выпущена в 1987)[7] и теперь являются стандартными функциями в современных дистрибутивах Linux (например, Debian, Red Hat). Согласно руководству Debian по cron[8]:
# Эквивалентно 0 0 * * *
@daily /path/to/script
IV. Распространённые различия реализаций и нюансы
Разные реализации cron имеют тонкие отличия, для которых следует обращаться к соответствующей документации:
| Реализация |
Возможности |
Ссылка на официальный ресурс |
| Cronie |
Cron по умолчанию в Red Hat, поддерживает сокращения @ |
Cronie на GitHub |
| systemd |
Заменяет cron юнитами .timer (рекомендуется для новых систем) |
Руководство по systemd.timer |
| fcron |
Поддерживает более сложный синтаксис (например, @yearly) |
Сайт fcron |
V. Рекомендуемые инструменты проверки и авторитетные источники
-
Страница руководства Crontab
Выполните man 5 crontab в терминале для получения полного синтаксиса — самая прямая локальная авторитетная справка.
-
Генераторы выражений Cron
-
Документация открытых проектов
VI. Резюме
Сочетая стандарт POSIX, страницы руководства Linux и документацию основных реализаций (например, Cronie), пользователи могут точно понять основную логику выражений cron. Для расширенного использования (например, L и W) учитывайте совместимость реализаций и отдавайте приоритет официальным источникам.
Ссылки