Cron-выражения: шпаргалка с примерами, которую не стыдно добавить в закладки

💻 IT и кодОбновлено: 8 июля 2026 г.4 мин чтения
Замучились гуглить синтаксис cron каждый раз, когда нужно запланировать задачу? Эта шпаргалка с примерами и инструментами покроет все сценарии — от обычного «каждый день в 3 утра» до наносекундных интервалов. Сохраняйте себе и пользуйтесь.

Синтаксис cron-выражения за 30 секунд

Каждая cron-строка — это 5 полей, разделённых пробелами:

┌──────────── минуты (0–59)
│ ┌────────── часы (0–23)
│ │ ┌──────── день месяца (1–31)
│ │ │ ┌────── месяц (1–12, или jan–dec)
│ │ │ │ ┌──── день недели (0–7, где 0 и 7 = вс, или sun–sat)
│ │ │ │ │
* * * * *

Звёздочка * означает «каждый возможный». Пример: 30 2 * * * — запуск в 2:30 ночи каждый день.

🔑 В /etc/crontab и системных crontab перед полем минуты добавляется имя пользователя: например, 30 2 * * * root kommanda.

Специальные символы: / , - и их комбинации

  • запятая — перечисление: 1,15,30 * * * * — на 1-й, 15-й и 30-й минуте каждого часа.
  • дефис — диапазон: 9-17 * * * * — каждый час с 9 до 17 (включительно).
  • звёздочка — все допустимые значения.
  • слеш — шаг: */5 * * * * — каждые 5 минут. Можно комбинировать: 10-30/5 * * * * — каждые 5 минут с 10-й по 30-ю.

Также существуют макросы (нестандартные, но поддерживаемые многими системами):

МакросЭквивалентПояснение
@yearly0 0 1 1 *1 января в 00:00
@monthly0 0 1 * *Первого числа каждого месяца
@weekly0 0 * * 0Каждое воскресенье в 00:00
@daily0 0 * * *Каждый день в 00:00
@hourly0 * * * *В начале каждого часа

🛠 Удобный инструмент: Cron генератор онлайн — визуально строите расписание и сразу копируете готовую строку.

Рабочие примеры: от простого к сложному

Каждые 15 минут: */15 * * * *

Каждый час в рабочие дни (пн–пт): 0 * * * 1-5

Первый понедельник каждого месяца: Крайне сложно вручную, но помните: день недели и день месяца — это ИЛИ, а не И. Поэтому 0 0 1-7 * 1 (1-7 дни месяца ИЛИ пн) — неверно. Правильное решение — использовать скрипт-проверку в команде.

Каждое полугодие 1 марта и 1 сентября: 0 0 1 3,9 *

В 23:00 каждую пятницу 13-го: Невыразимо одной cron-строкой без дополнительной логики из-за конфликта двух полей. Используйте 0 23 13 * 5 /path/to/check_if_friday.sh, где скрипт проверяет, является ли 13-е пятницей, и если да — выполняет задачу.

Алгоритм отладки cron-задачиЗадача не выполняетсяПроверьте crontabЕсть ли запись?Добавьте задачуПроверьте демонЗапущен ли cron?Запустите демонСмотрите логи
Схема отладки cron-задачи: от проверки crontab до анализа логов.

Подводные камни и частые ошибки

  1. Дни недели и дни месяца — OR, а не AND. 0 0 13 * 5 означает «каждую пятницу ИЛИ каждое 13-е число». Чтобы получить оба условия одновременно — используйте скрипт.
  2. Переход на летнее время. Задачи, запланированные на 2:30, могут не выполниться в день перевода часов. Решение — использовать UTC в cron.
  3. Символ % обрабатывается специально. Внутри команды cron преобразует % в новую строку. Экранируйте обратной косой чертой.
  4. Пробелы в путях. Если путь содержит пробелы — заключайте его в двойные кавычки.
  5. Права и окружение. Cron выполняется с минимальными переменными окружения. Для сложных скриптов загружайте профиль в начале: source ~/.bashrc или задавайте HOME и PATH явно.
❗ Всегда проверяйте cron-строку на онлайн-симуляторе перед добавлением в продакшен. Используйте Калькулятор времени выполнения cron-задач — он покажет ближайшие 10 дат выполнения.

Чек-лист: проверка корректности cron-задачи

0 из 10

Как отладить cron, если задача не работает

Пошаговая диагностика:

  1. Проверьте, запущен ли cron-демон: systemctl status cron (или service cron status).
  2. Проверьте crontab: crontab -l (текущий пользователь) или sudo crontab -l (root).
  3. Посмотрите логи: grep CRON /var/log/syslog (или /var/log/cron).
  4. Выполните команду вручную из терминала — работает ли она сама?
  5. Убедитесь, что полный путь к исполняемому файлу указан в cron (используйте which).
  6. Проверьте права файла скрипта: chmod +x /путь/к/скрипту.
  7. Перенаправьте вывод: */5 * * * * /my/script.sh >> /tmp/cron.log 2>&1
  8. Убедитесь, что синтаксис cron правильный с помощью онлайн-генератора.

Ещё один трюк: добавьте задачу с * * * * * (каждую минуту) и запишите что-то очевидное — если лог не обновляется, проблема в демоне или правах.

Практические сценарии: бэкапы, логи, уведомления

Ежедневный бэкап базы данных в 3 утра:

0 3 * * * pg_dump -U username dbname > /backups/db_$(date +\%Y\%m\%d).sql

Очистка логов старше 30 дней каждую первую субботу:

0 6 1-7 * 6 find /var/log/myapp/*.log -mtime +30 -delete

Уведомление в Telegram при перезагрузке сервера:

@reboot /usr/bin/curl -s "https://api.telegram.org/botTOKEN/sendMessage?chat_id=CHATID&text=Server+rebooted"

Макрос @reboot запускается при старте системы — удобно для проверки статуса.

🧮 Посчитайте сами — инструменты по теме

Частые вопросы

Что значит * * * * * в cron?

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

Как задать cron каждые 30 минут?

Используйте */30 * * * * — это запуск в 0 и 30 минут каждого часа.

Как в cron задать выполнение с понедельника по пятницу в 9 утра?

Запись: 0 9 * * 1-5 (минута 0, час 9, любой день месяца, любой месяц, дни недели 1-5).

Почему моя cron-задача не выполняется?

Причин много: демон остановлен, нет прав на скрипт, неправильный синтаксис, путь к исполняемому файлу не полный, ошибка в команде. Используйте логи и перенаправление вывода для диагностики.

Можно ли задать cron каждые 10 секунд?

Стандартный cron не поддерживает секунды; минимальный интервал — 1 минута. Для интервалов короче используйте systemd.timer или написать скрипт с sleep 10 внутри задачи, запущенной каждую минуту.

Что такое @reboot в cron?

Это специальный макрос (не во всех системах), который запускает задачу при старте системы. Поместите @reboot путь/к/скрипту в crontab.

Как удалить все cron-задачи пользователя?

Выполните crontab -r (с осторожностью). Можно также закомментировать строки, добавив # в начало.

Как проверить, когда в следующий раз выполнится cron-задача?

Используйте онлайн-калькулятор или утилиту cronnext (если установлена). Также можно посмотреть в логи после запуска.

Источники и нормативные документы

  1. crontab man page (Linux man-pages)
  2. Cron documentation — Arch Linux Wiki
  3. Crontab.guru — The cron schedule expression editor