Введение / Зачем это нужно
Cron — это стандартный планировщик задач в Linux, который позволяет автоматически выполнять скрипты или команды в заданное время. С его помощью можно автоматизировать резервное копирование, обновление системных логов, отправку уведомлений и многие другие рутинные операции. После выполнения этого гайда вы сможете настраивать как простые, так и сложные задания, а также быстро устранять типичные ошибки.
Требования / Подготовка
- Любая современная дистрибутива Linux (Ubuntu, Debian, CentOS, Fedora и др.).
- Права суперпользователя (
sudo), чтобы устанавливать службы и редактировать системные таблицы. - Установленный пакет
cron(обычно уже присутствует в базовой системе). - Текстовый редактор в терминале (
nano,vim,emacs).
Шаг 1: Установка и проверка службы cron
Убедитесь, что cron уже установлен в системе:
cron --version
Если команда не найдена, установите пакет в зависимости от дистрибутива:
# Debian/Ubuntu
sudo apt update && sudo apt install cron
# RHEL/CentOS
sudo yum install cronie
После установки активируйте и запустите службу:
sudo systemctl enable --now cron
Проверьте, что служба работает:
sudo systemctl status cron
Если служба активна, вы увидите статус активен (работает).
Шаг 2: Открытие таблицы crontab
Для настройки заданий, которые будут выполняться от вашего имени, откройте таблицу crontab:
crontab -e
Система предложит выбрать текстовый редактор (nano, vim и т.д.). В этом файле хранятся все задания cron для текущего пользователя.
💡 Совет: Если редактор не установлен, сначала установите
nano:sudo apt install nano.
Шаг 3: Добавление нового задания
Правила заданий cron состоят из пяти полей, разделённых пробелами, за которыми следует команда:
* * * * * команда
| | | | |
| | | | +----- день недели (0–7, 0 и 7 — воскресенье)
| | | +------- месяц (1–12)
| | +--------- день месяца (1–31)
| +----------- час (0–23)
+------------- минута (0–59)
Пример: Запланировать выполнение скрипта /home/user/scripts/backup.sh ежедневно в 03:00 ночи:
0 3 * * * /home/user/scripts/backup.sh
Добавьте эту строку в таблицу crontab, сохраните файл и выйдите из редактора. Cron автоматически применит новые правила.
Шаг 4: Перезапуск cron и проверка
Перезапустите демо́н, чтобы гарантировать применение изменений:
sudo systemctl restart cron
Проверьте статус службы ещё раз:
sudo systemctl status cron
Убедитесь, что задание появилось в вашей таблице:
crontab -l
Если строка отображается, планировщик принял задание.
Шаг 5: Тестирование задания
Для быстрой проверки работоспособности добавьте временное задание, которое будет запускаться каждую минуту:
* * * * * /usr/bin/echo "тест $(date)" >> /tmp/cron.log
Через минуту проверьте содержимое файла:
cat /tmp/cron.log
Если вывод содержит строку с датой, задание cron работает корректно.
Шаг 6: Дополнительные советы и системные задания
- Глобальные задания: Для настройки заданий, доступных всем пользователям, отредактируйте файл
/etc/crontabили создайте файл в директории/etc/cron.d/с указанием пользователя перед командой. - Используйте абсолютные пути: Всегда указывайте полный путь к скриптам, чтобы избежать ошибок при изменении текущей директории.
- Установите права доступа: Убедитесь, что скрипты исполняемы (
chmod +x /path/to/script.sh). - Настройка окружения: Если скрипту нужны переменные окружения, добавьте их перед командой, например
SHELL=/bin/bashилиPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin.
Проверка результата
После выполнения всех шагов проверьте:
- Служба cron активна:
sudo systemctl is-active cron. - Ваше задание отображается:
crontab -l. - Скрипт был запущен в ожидаемое время (проверьте лог-файл или вывод скрипта).
- Системные задания (из
/etc/crontab) также активны:grep -r "^\*\/" /etc/crontab.
Если все пункты выполнены, планировщик работает как надо.
Возможные проблемы
- Задание не выполняется: Проверьте синтаксис таблицы crontab (
crontab -l), убедитесь, что скрипт исполняем и использует абсолютный путь. - Ошибка «команда не найдена»: Укажите полный путь к исполняемому файлу, иначе cron ищет его в системном
PATH, который может отличаться. - Нет журналов: Включите логгирование заданий, добавив
MAILTO=your@email.comв таблицу crontab, чтобы получать уведомления о запуске. - Проблемы с правами: Если задание создано root, но должно выполняться от имени другого пользователя, используйте синтаксис
usernameв/etc/cron.d/илиsudo -u username команда.
Не стесняйтесь обращаться к документации cron (man crontab, man cron) для более глубокого понимания настроек.