Как составить расписание crontab
Cron-выражение задаёт время запуска регулярной задачи. В пользовательском crontab Linux после пяти полей времени записывают команду. Само выражение определяет только расписание: оно не содержит путь к скрипту и не создаёт задание на сервере.
Генератор пригодится для резервного копирования, очистки журналов и периодического обмена данными. Проверка ближайших дат помогает заметить неверный день недели или перепутанные поля до установки задания. Работоспособность скрипта нужно проверять отдельно.
От нужной периодичности к cron-выражению
- Выберите шаблон или настройте каждое из пяти полей.
- Для нескольких значений используйте список, для последовательных — диапазон.
- Готовую строку можно проверить в редакторе: вставьте только расписание, без команды.
- Сверьте даты в UTC с часовым поясом сервера и скопируйте результат.
Синтаксис cron: пять полей по порядку
Поля разделяются пробелами: минута, час, день месяца, месяц, день недели. Воскресенье обозначается 0 или 7. Для месяцев и дней недели разрешены JAN–DEC и SUN–SAT; русские сокращения в выражении не используются.
| Поле | Диапазон |
|---|---|
| Минута | 0–59 |
| Час | 0–23 |
| День месяца | 1–31 |
| Месяц | 1–12 |
| День недели | 0–7 |
- * — все значения поля.
- , — отдельные значения, например 0,30.
- - — диапазон с включёнными границами, например 1-5.
- / — шаг внутри поля, например
*/15.
Примеры cron: каждые пять минут, ежедневно, раз в месяц
Указанные часы относятся к часовому поясу планировщика. Расписание с понедельника по пятницу не учитывает праздники и переносы рабочих дней: при необходимости их проверяют в коде задачи.
| Выражение | Расписание |
|---|---|
*/5 * * * * | Каждые пять минут |
30 2 * * * | Ежедневно в 02:30 |
0 9 * * 1 | По понедельникам в 09:00 |
0 9 * * 1-5 | С понедельника по пятницу в 09:00 |
0 0 1 * * | Первого числа каждого месяца |
0 0 29 2 * | 29 февраля в високосные годы |
Добавление задания на Linux-сервер
Команда crontab -e открывает задания текущего пользователя. В примере ниже скрипт резервного копирования запускается ежедневно в 02:30 по часовому поясу, настроенному для cron.
Указывайте абсолютный путь, проверьте права на запуск и состояние службы cron. Окружение задания может отличаться от интерактивного терминала, поэтому успешный ручной запуск ещё не подтверждает работу по расписанию.
30 2 * * * /usr/local/bin/backup.shЧастые вопросы о cron-выражениях
Время показано по Москве?
Нет, все даты предпросмотра приведены в UTC. В cron-выражении нет часового пояса: его задаёт планировщик. Сверьте настройки сервера, прежде чем переносить расписание в crontab.
Что означает */5 в поле минут?
Запуск на минутах 0, 5, 10 и далее в каждом часе. Отсчёт не начинается с момента сохранения задания. Шаг применяется внутри поля, а не к прошедшему времени.
Как сочетаются день месяца и день недели?
Если ограничены оба поля, достаточно совпадения одного. Выражение 0 9 1 * MON соответствует первому числу месяца или понедельнику в 09:00. Если одно из полей начинается с *, требуется выполнение обоих условий дня.
Поддерживаются ли Quartz и секунды?
Нет, здесь используется формат Linux из пяти полей. Секунды, ?, L, W, # и @reboot не поддерживаются. Сокращения @hourly, @daily, @weekly, @monthly и @yearly преобразуются в обычное выражение.
Почему нет пяти ближайших запусков?
Поиск ограничен восемью годами. Для несуществующего 31 февраля дат не будет, а 29 февраля может встретиться меньше пяти раз. Синтаксически допустимая запись не обязательно соответствует реальной дате.
Инструменты для проверки заданий
Официальная документация crontab проекта Cronie (на английском)
