В мире Linux есть инструменты, которые становятся верными союзниками системного администратора и разработчика. Один из них — cron, планировщик задач, который работает в фоновом режиме и выполняет команды по расписанию. Представьте: ваши резервные копии создаются сами, система обновляется без вашего участия, а отчеты приходят на почту точно в срок. В этой статье мы разберем, как настроить cron в Ubuntu от основ до продвинутых техник, превратив рутину в автоматизированный процесс.
Что такое Cron и зачем он нужен?
Cron — это демон (служба), который запускает команды или скрипты по заранее заданному расписанию. Он использует специальный файл под названием "crontab" (cron table), где каждая строка определяет одну задачу. Cron идеально подходит для:
- Регулярного создания резервных копий
- Автоматического обновления системы и пакетов
- Очистки временных файлов и логов
- Запуска скриптов мониторинга
- Отправки уведомлений и отчетов
Демон cron обычно уже установлен в Ubuntu по умолчанию и запускается автоматически при загрузке системы. Проверить его статус можно командой: systemctl status cron
Основы синтаксиса crontab
Каждая строка в crontab состоит из шести полей, разделенных пробелами:
- Минуты (0-59)
- Часы (0-23)
- День месяца (1-31)
- Месяц (1-12 или jan-dec)
- День недели (0-7 или sun-sat, где 0 и 7 — воскресенье)
- Команда для выполнения
Практические примеры расписания
Рассмотрим несколько наглядных примеров:
0 3 * * * /backup/script.sh— каждый день в 3:00 ночи30 14 * * 1 /usr/bin/update-system— каждый понедельник в 14:30*/15 * * * * /monitor/check.sh— каждые 15 минут0 0 1 * * /scripts/monthly-report— первого числа каждого месяца
Работа с crontab: основные команды
Для управления своими задачами используйте следующие команды:
Просмотр задач
crontab -l — показать все ваши cron-задачи
Редактирование задач
crontab -e — открыть редактор для добавления или изменения задач. При первом использовании система предложит выбрать редактор (рекомендуется nano или vim).
Удаление всех задач
crontab -r — полностью очистить ваш crontab (используйте с осторожностью!)
Для редактирования системного crontab (задачи, выполняемые от имени root) используйте sudo crontab -e. Системные задачи обычно хранятся в /etc/crontab и /etc/cron.d/
Продвинутые техники и лучшие практики
Перенаправление вывода
По умолчанию cron отправляет вывод команд на почту пользователю. Чтобы сохранить вывод в файл или отправить его в никуда:
0 2 * * * /script.sh > /var/log/myscript.log 2>&1— сохранить и стандартный вывод, и ошибки0 4 * * * /script.sh > /dev/null 2>&1— полностью игнорировать вывод
Переменные окружения
Cron использует минимальное окружение. Всегда указывайте полные пути к командам и скриптам. Можно задать переменные в начале crontab:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=your@email.com
Специальные директории
Ubuntu предоставляет удобные директории для периодических задач:
/etc/cron.hourly/— скрипты, выполняемые каждый час/etc/cron.daily/— ежедневные задачи/etc/cron.weekly/— еженедельные задачи/etc/cron.monthly/— ежемесячные задачи
Просто поместите исполняемый скрипт в соответствующую папку, и он будет запускаться автоматически.
Отладка и мониторинг cron-задач
Если задача не выполняется:
- Проверьте синтаксис с помощью онлайн-валидаторов crontab
- Убедитесь, что скрипт исполняемый:
chmod +x script.sh - Проверьте логи cron:
grep CRON /var/log/syslog - Тестируйте команду вручную из-под того же пользователя
- Убедитесь, что демон cron запущен:
systemctl restart cron
Безопасность и ограничения
Для управления доступом к cron используются два файла:
/etc/cron.allow— список пользователей, которым разрешено использовать cron/etc/cron.deny— список пользователей, которым запрещено использовать cron
Если существует cron.allow, то только пользователи из этого файла могут использовать cron. Если файла нет, но есть cron.deny, то все, кроме перечисленных, могут использовать cron. Если оба файла отсутствуют, то доступ зависит от настроек системы (обычно разрешен всем).
Никогда не запускайте задачи от root без необходимости. Создавайте отдельных пользователей для разных типов задач и используйте sudo с ограниченными правами там, где это действительно нужно.
Альтернативы: systemd timers
В современных дистрибутивах, включая Ubuntu, появилась альтернатива — systemd timers. Они предлагают:
- Более гибкое расписание
- Лучшую интеграцию с systemd
- Зависимости между задачами
- Более детальное логирование
Однако cron остается отличным выбором для простых и понятных периодических задач.
FAQ: Часто задаваемые вопросы
Как запускать задачу каждые 10 минут?
Используйте шаг: */10 * * * * /ваша/команда
Почему моя задача не выполняется?
Проверьте: 1) синтаксис crontab, 2) права на скрипт, 3) логи в /var/log/syslog, 4) работает ли демон cron.
Можно ли запускать задачи с интервалом в секунды?
Нет, минимальный интервал в cron — 1 минута. Для секундных интервалов используйте sleep в скрипте или рассмотрите альтернативы.
Как отправить вывод задачи на email?
Добавьте в начало crontab: MAILTO=ваш@email.com. Или используйте перенаправление с помощью mail в самой команде.
Где хранятся crontab разных пользователей?
Обычно в /var/spool/cron/crontabs/, но редактировать их нужно только через crontab -e.
Можно ли использовать переменные в crontab?
Да, задавайте их в начале файла: MY_VAR=\"значение\", затем используйте как $MY_VAR в командах.