Введение / Зачем это нужно
Cron — это встроенный планировщик задач в Linux, который позволяет автоматически запускать команды или скрипты в нужное время. Это полезно для резервного копирования, ротации логов, обновления данных и других рутинных операций, которые должны выполняться без вашего участия. После выполнения этого гайда вы сможете настраивать расписания, управлять заданиями и проверять их выполнение.
Требования / Подготовка
- Система на базе Linux (Ubuntu 22.04+, Debian 11+, CentOS Stream 9 или Fedora 38+).
- Пользователь с правами на выполнение
crontab(обычный пользователь или root). - Установленный пакет cron (в большинстве дистрибутивов он предустановлен; при необходимости выполните
sudo apt install cronилиsudo dnf install cronie). - Базовое понимание командной строки и абсолютных путей.
Шаг 1: Открыть планировщик для редактирования
Запустите команду:
crontab -e
- Для текущего пользователя это откроет его личное расписание.
- Для root используйте
sudo crontab -e, чтобы управлять системными заданиями.
При первом запуске система может предложить выбрать редактор. Выберите тот, который вам удобен (например, nano).
Шаг 2: Понять формат строки задания
Каждая строка в crontab состоит из пяти полей времени и команды:
* * * * * команда
│ │ │ │ │
│ │ │ │ └─── день недели (0–7, где 0 и 7 — воскресенье)
│ │ │ └───── месяц (1–12)
│ │ └─────── день месяца (1–31)
│ └───────── час (0–23)
└─────────── минута (0–59)
Примеры:
- Каждую минуту:
* * * * * /path/to/script.sh - Каждый день в 03:30:
30 3 * * * /path/to/script.sh - Каждый понедельник в 08:00:
0 8 * * 1 /path/to/script.sh
Шаг 3: Добавить переменные окружения при необходимости
В crontab можно задать переменные перед списком заданий. Это полезно, если скрипт зависит от конкретного PATH или локали.
Пример:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8
Добавьте такие строки в начале файла, если ваши задания не находят команды или требуют определённой локали.
Шаг 4: Использовать абсолютные пути в командах
Cron запускает задания с минимальным окружением. Всегда указывайте полный путь к скриптам и исполняемым файлам. Например:
* * * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
Здесь:
/home/user/scripts/backup.sh— абсолютный путь к скрипту.>> /var/log/backup.log— добавление стандартного вывода в лог.2>&1— перенаправление ошибок в тот же файл.
Шаг 5: Сохранить и проверить статус cron
После сохранения изменений проверьте, что cron обработал задание:
- В Ubuntu/Debian:
grep CRON /var/log/syslog
- В системах с systemd (CentOS/Fedora):
journalctl -u crond --since "1 minute ago"
Вы должны увидеть строки, подтверждающие загрузку или выполнение задания.
Проверка результата
Чтобы убедиться, что задание работает:
- Дождитесь времени выполнения по расписанию и проверьте целевой файл или лог.
- Временно добавьте простое задание для теста, например:
* * * * * /bin/date >> /tmp/cron-test.log
- Подождите минуту и выполните:
cat /tmp/cron-test.log
Если время обновляется — cron работает корректно.
Возможные проблемы
- Команда не найдена. Укажите абсолютный путь и, при необходимости, настрой
PATHв начале crontab. - Нет прав на выполнение. Убедитесь, что скрипт имеет бит выполнения:
chmod +x /path/to/script.sh. - Ошибки в окружении. Добавьте экспорт переменных или запускайте скрипт через оболочку явно:
/bin/bash /path/to/script.sh. - Логи не пишутся. Проверьте права на запись в файл лога и наличие свободного места на диске.