Введение / Зачем это нужно
Cron — это планировщик задач в Linux, который позволяет автоматически выполнять скрипты или команды в заданное время. С его помощью можно проводить обновления, резервное копирование, очистку логов и многие другие рутинные операции без вмешательства пользователя. После выполнения этого гайда вы сможете настроить как пользовательские, так и системные cron-задания и диагностировать типичные ошибки.
Требования / Подготовка
- Доступ к терминалу с правами администратора (sudo).
- Система на базе Linux (поддерживаются Ubuntu 22.04, Debian 12, Fedora 36, CentOS 8).
- Базовые знания синтаксиса командной строки и работы с текстовым редактором.
- Необязательно: скрипты, которые вы хотите запланировать (они должны быть исполняемыми).
Пошаговая инструкция
Шаг 1: Включить службу cron и проверить её статус
Сначала убедитесь, что демон cron работает. В большинстве дистрибутивов служба называется cron (или crond в некоторых случаях).
sudo systemctl enable cron
sudo systemctl status cron
💡 Совет: Если служба уже активна, команда
statusпросто выведет информацию о работающем процессе.
Шаг 2: Создать или отредактировать пользовательский crontab
Пользовательский crontab содержит задания, принадлежащие конкретному пользователю. Он редактируется с помощью команды crontab -e.
crontab -e
Выберите редактор (обычно vi или nano). Добавьте задание, например, чтобы запускать скрипт /home/user/backup.sh каждый день в 02:00 ночи:
0 2 * * * /home/user/backup.sh
Сохраните файл и выйдите. После сохранения crontab становится активным.
Шаг 3: Добавить системное cron-задание (если необходимо)
Системные задания размещаются в каталоге /etc/cron.d/. Они применяются ко всем пользователям и могут использоваться для глобальных задач, таких как ежедневное обновление пакетов.
Создайте файл, например, my‑job:
sudo nano /etc/cron.d/my-job
Добавьте строку в формате crontab, например:
0 3 * * * root /usr/bin/yum -y update
Убедитесь, что файл имеет права 644 и принадлежит корневому пользователю:
sudo chmod 644 /etc/cron.d/my-job
sudo chown root:root /etc/cron.d/my-job
Cron автоматически загрузит новое задание; перезагрузка службы не требуется.
Шаг 4: Проверить и отладить cron-задания
Чтобы убедиться, что задания настроены правильно:
# Показать пользовательский crontab текущего пользователя
crontab -l
# Просмотреть системные задания
ls -l /etc/cron.d/
Проверьте журнал cron на предмет ошибок:
sudo journalctl -u cron -b
Если скрипт должен запускаться, но не запускается, выполните его вручную (с теми же параметрами, что и в crontab), чтобы выявить проблемы с путями или правами.
Проверка результата
- Визуальная проверка:
crontab -lотображает ваши пользовательские задания. Просмотрите/etc/cron.d/для системных заданий. - Лог выполнения: Некоторое время подождите (или установите задание с интервалом несколько минут) и проверьте
journalctl -u cron. Успешные запуски обычно фиксируются без ошибок. - Ручное тестирование: Запустите целевой скрипт с теми же параметрами, которые указаны в cron-задании, чтобы подтвердить работоспособность.
Возможные проблемы
- Задание не запускается: Проверьте синтаксис crontab (отсутствие лишних пробелов, правильный таймzón). Убедитесь, что скрипт исполняем (
chmod +x). - Неправильное время выполнения: Системный часовой пояс cron может отличаться от таймзоны пользователя. Используйте строку
TZ, чтобы задать часовой пояс в/etc/cron.d/файле. - Недостаток прав: Системные задания должны указывать пользователя (например,
root). Пользовательские задания наследуют права вызывающего пользователя. - Переполнение логов: Если cron создает много журналов, настройте ротацию логов (
logrotate) для/var/log/syslogили/var/log/cron.log.
Теперь у вас есть полностью работоспособная система cron, готовая автоматизировать любую регулярную задачу в вашей среде Linux. Не стесняйтесь экспериментировать с синтаксисом и интегрировать cron с другими инструментами автоматизации, такими как Ansible или Docker Compose, для более сложных рабочих процессов.