Введение
Cron — это стандартный планировщик задач в Linux, который позволяет автоматически запускать скрипты, команды или другие программы по заданному расписанию. Настройка cron позволяет автоматизировать рутинные операции: резервное копирование данных, обновление системных логов, отправку отчетов и многое другое. После выполнения этого гайда вы сможете создавать как личные, так и системные задачи, а также отлавливать распространенные ошибки.
Требования / Подготовка
- Любая современная Linux‑дистрибутивная система (в статье приведены примеры для Ubuntu, Debian и CentOS).
- Права администратора (
sudo), чтобы устанавливать пакеты и редактировать таблицы cron. - Установленный текстовый редактор (
nanoилиvim); если редактора нет, он будет установлен автоматически. - Базовое знание синтаксиса таблиц cron (пять полей времени + команда).
Пошаговая инструкция
Шаг 1: Установка и запуск cron-сервиса
Убедитесь, что cron уже установлен. В Debian‑based системах выполните:
sudo apt update
sudo apt install cron
В RedHat‑based дистрибутивах:
sudo yum install cronie
Запустите службу и включите автозапуск:
sudo systemctl start cron
sudo systemctl enable cron
Проверьте статус:
systemctl status cron
Шаг 2: Редактирование личной таблицы crontab
Для настройки задач, относящихся к вашему пользователю, отредакруйте таблицу crontab:
crontab -e
В первом запуске выберите редактор (например, nano). Добавьте задачу, например, для ежедневного резервного копирования базы данных в 02:00 ночи:
0 2 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1
Сохраните файл и выйдите. Таблица cron будет автоматически загружена системой.
Шаг 3: Создание системной задачи в /etc/cron.d
Системные задачи находятся в /etc/cron.d. Создайте файл, например, /etc/cron.d/nightly-cleanup:
# Ежедневная очистка логов в 3:30 ночи
30 3 * * * root /usr/local/bin/clean_logs.sh >> /var/log/cleanup.log 2>&1
Назначьте права для безопасности:
chmod 644 /etc/cron.d/nightly-cleanup
Система будет запускать эти задачи от указанного пользователя (root в данном случае) без необходимости редактирования пользовательской таблицы crontab.
Шаг 4: Проверка списка задач и логов
Чтобы убедиться, что задачи зарегистрированы, выполните:
crontab -l # ваши личные задачи
ls -l /etc/cron.* # системные таблицы
ls -l /etc/cron.d # системные задачи
Отслеживайте работу cron:
journalctl -u cron -f # в системах с systemd
# или
grep CRON /var/log/syslog
Если задача выполняется, в логах появится запись наподобие CRON[12345]: (root) CMD ( /path/to/script.sh ).
Проверка результата
- Подождите ближайшее запланированное время выполнения задачи или запустите её принудительно, добавив
* * * * *в тестовом задании. - Проверьте выходные данные: если задача пишет в файл, убедитесь, что файл обновляется (
tail -f /var/log/backup.log). - Проверьте системные логи, чтобы убедиться, что cron сообщил об успешном выполнении задачи.
Возможные проблемы
- Ошибка доступа: cron не может выполнить задачу, если у скрипта нет прав на выполнение (
chmod +x /path/to/script.sh). - Синтаксис таблицы: проверьте правильность полей времени и отсутствия лишних пробелов. Ошибки часто скрыты в табуляциях — используйте
crontab -l | crontab --check. - Задачи не запускаются: убедитесь, что cron работает (
systemctl status cron). Перезапустите службу:sudo systemctl restart cron. - Дублирующиеся задачи: перед добавлением новой задачи проверьте существующие (
crontab -l) и системные задачи (ls -l /etc/cron.d).
Если задача по-прежнему не работает, запустите cron в отладочном режиме:
sudo systemctl status cron
sudo journalctl -u cron -b
Эти команды покажут точную причину сбоя и помогут устранить проблему.