Введение / Зачем это нужно
Cron — это стандартный планировщик задач в Linux, который позволяет автоматически выполнять скрипты, команды или другие действия по заданному расписанию. Настройка Cron помогает автоматизировать рутинные операции: резервное копирование, обновление систем, отправку отчетов, очистку логов и многое другое. После выполнения этого руководства вы сможете добавлять, редактировать и отлаживать задачи Cron, чтобы сделать работу с системой более эффективной.
Требования / Подготовка
- Доступ к системе с правами root или пользователя sudo.
- Установленный пакет
cron(в большинстве дистрибутивов он уже присутствует). - Базовое знание работы с командной строкой и текстовыми редакторами (например,
vi,nano). - Желательно иметь скрипты или команды, которые вы хотите запланировать.
Пошаговая инструкция
Шаг 1: Установка и запуск службы Cron
На большинстве дистрибутивов Linux cron уже установлен. Если нет, установите его:
# Для Debian/Ubuntu
sudo apt-get update && sudo apt-get install cron
# Для RHEL/CentOS
sudo yum install cron
# Для Fedora
sudo dnf install cronie
После установки запустите и включите сервис:
sudo systemctl start cron
sudo systemctl enable cron
sudo systemctl status cron
Шаг 2: Редактирование таблицы crontab
Откройте таблицу для редактирования с помощью редактора командной строки:
sudo crontab -e
Добавьте задачу в формате минута час день месяц день_неделе команда. Например, запуск скрипта /home/user/backup.sh каждый день в 02:00:
0 2 * * * /home/user/backup.sh
Шаг 3: Создание простой задачи с выводом лога
Чтобы убедиться, что задачи выполняются, создайте тестовый скрипт, например ~/test.sh:
cat > ~/test.sh << 'EOF'
#!/bin/bash
echo "Задача Cron запустилась $(date)" >> ~/cron.log
EOF
chmod +x ~/test.sh
Добавьте вызов скрипта в таблицу crontab:
* * * * * ~/test.sh
Сохраните изменения.
Шаг 4: Проверка списка задач
Проверьте, что задачи добавлены:
crontab -l
Для просмотра всех задач системы (требуются права root):
sudo cat /etc/crontab
Или список из /var/spool/cron/:
sudo ls -l /var/spool/cron
Шаг 5: Устранение распространённых проблем
Если задачи не работают, выполните следующие проверки:
- Сервис cron работает:
systemctl is-active cron
- Проверьте логи:
tail -n 20 /var/log/syslog | grep CRON
- Убедитесь, что скрипты доступны для чтения:
ls -l ~/test.sh
- Проверьте права на директорию spool:
ls -ld /var/spool/cron
Если задача запускается, но не выводит результат, добавьте явное перенаправление вывода в таблицу crontab:
* * * * * ~/test.sh >> ~/cron.log 2>&1
Проверка результата
- Подождите одну минуту — новая строка должна появиться в
~/cron.log. - Проверьте журнал cron на наличие записей:
grep "CRON" /var/log/syslog | tail -5
- Убедитесь, что служба cron работает:
systemctl status cron
Если всё отображается корректно, задачи настроены правильно.
Возможные проблемы
| Симптом | Причина | Решение |
|---|---|---|
| Задача не запускается | Сервис cron остановлен | sudo systemctl start cron |
| Нет вывода в логе | Отсутствие прав на скрипт или директорию | chmod +x ~/script.sh и chmod 755 ~/ |
| Ошибка «Permission denied» | Запуск от неправильного пользователя | Используйте sudo -u username в таблице crontab |
| Задача выполняется в неверное время | Ошибки в формате таблицы crontab | Проверьте значения минут, часов, дня недели |
| Лог переполняется | Нет ротации логов | Добавьте ротацию логов через logrotate или перенаправьте вывод в файл с ротацией |
Если проблема не решена, проверьте системные логи (/var/log/syslog, /var/log/cron) на наличие более подробных сообщений об ошибках.