Cron-задачи: синтаксис crontab с примерами

Cron запускает команды по расписанию на серверах Linux и macOS. В этом руководстве — формат crontab, самые нужные расписания и ошибки, из-за которых cron-задачи молча не работают.

Открыть инструмент: Расшифровка и генератор cron-выражений

Добавить cron-задачу

Выполните crontab -e, чтобы открыть свой crontab в редакторе. Добавьте по строке на задачу: пять полей расписания и затем команда, например 0 2 * * * /home/me/backup.sh. Сохраните и закройте редактор — cron применит изменения автоматически.

Командой crontab -l можно вывести список задач. Системные задачи лежат в /etc/crontab и /etc/cron.d; там после расписания есть ещё одно поле — пользователь, от имени которого выполняется команда.

Как читать пять полей

Слева направо: минута, час, день месяца, месяц и день недели. Задача запускается, когда все поля совпадают с текущим временем. Звёздочка подходит к любому значению, запятые задают списки, дефисы — диапазоны, а косая черта — шаг.

Записывайте вывод в лог

У cron нет терминала, поэтому вывод отправляется пользователю по почте или теряется. Добавьте >> /var/log/myjob.log 2>&1 в конец команды, чтобы при проблемах было что посмотреть.

Почему cron-задача не запускается

  • PATH в cron минимальный. Указывайте полные пути к программам и скриптам, например /usr/bin/python3.
  • Скрипт не исполняемый. Выполните для него chmod +x.
  • Переменные окружения из профиля оболочки не загружаются. Задайте их в crontab или в скрипте.
  • Часовой пояс сервера отличается от вашего. Проверьте командой date или timedatectl.
  • Символ % в команде превращается в перевод строки. Пишите \%.

Проверьте расписание перед запуском

Вставьте выражение в расшифровщик cron на этой странице, чтобы увидеть его простыми словами и проверить ближайшие запуски. Так вы заметите значения вне диапазона и ловушку с днём месяца и днём недели до того, как задача попадёт в продакшен.