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