Представьте, что у вас есть личный цифровой помощник, который без напоминаний выполняет рутинные задачи: создаёт резервные копии, обновляет систему, отправляет отчёты или чистит временные файлы. Этот помощник существует и называется Cron — мощный планировщик задач в Linux-системах, включая Ubuntu. Освоив его, вы перестанете быть заложником повторяющихся действий и доверите их машине.
Что такое Cron и зачем он нужен?
Cron — это демон (фоновая служба), который выполняет команды по расписанию. Он читает конфигурационные файлы (crontab), где указано, что, когда и как запускать. Это не просто «напоминалка», а полноценный инструмент автоматизации системного администрирования, разработки и личного использования.
Cron работает даже если пользователь не авторизован в системе — это демон, который всегда «на страже».
Структура crontab: расшифровываем магию чисел
Каждая строка задачи в crontab состоит из пяти полей времени и самой команды:
* * * * * команда_для_выполнения │ │ │ │ │ │ │ │ │ └─── День недели (0-7, где 0 и 7 = воскресенье) │ │ │ └───── Месяц (1-12) │ │ └─────── День месяца (1-31) │ └───────── Час (0-23) └─────────── Минута (0-59)
Примеры расписаний
0 3 * * *— каждый день в 3:00 ночи*/15 * * * *— каждые 15 минут0 9 * * 1— каждый понедельник в 9:0030 18 1 * *— первого числа каждого месяца в 18:30
Практика: настройка своей первой задачи
1. Редактирование crontab
Откройте редактор crontab для текущего пользователя:
crontab -e
При первом запуске предложат выбрать редактор (nano — самый простой для новичков).
2. Добавление задачи
В конец файла добавьте строку. Например, для ежедневного обновления системы в 4:30 утра:
30 4 * * * sudo apt update && sudo apt upgrade -y
Для команд, требующих sudo, может потребоваться настройка прав в файле /etc/sudoers или использование root-crontab (sudo crontab -e).
3. Просмотр и управление задачами
crontab -l— список активных задачcrontab -r— удаление всех задач (осторожно!)sudo systemctl status cron— проверка работы демона
Продвинутые техники
Перенаправление вывода
По умолчанию cron отправляет вывод на email. Лучше перенаправить его в файл или «в никуда»:
0 2 * * * /home/user/backup.sh > /var/log/backup.log 2>&1
Или для полного игнорирования вывода:
*/5 * * * * /script.sh > /dev/null 2>&1
Переменные окружения
Cron использует минимальное окружение. Указывайте полные пути и настраивайте переменные в начале crontab:
SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 * * * * /full/path/to/script.py
Системные задачи
Системные cron-задачи хранятся в /etc/cron.d/, /etc/cron.hourly/, /etc/cron.daily/ и других директориях. Для глобальных задач используйте их.
Отладка и решение проблем
Если задача не выполняется:
- Проверьте логи:
grep CRON /var/log/syslog - Убедитесь, что демон cron работает:
sudo systemctl restart cron - Проверьте синтаксис на сайте-валидаторе crontab
- Тестируйте команду вручную из-под того же пользователя
В Ubuntu 20.04+ cron пишет логи в journalctl: sudo journalctl -u cron
Альтернативы: systemd timers
В современных Ubuntu можно использовать systemd timers — более мощную, но сложную альтернативу. Они интегрированы с systemd, имеют лучшую журнализацию и зависимости между задачами.
FAQ: Частые вопросы о Cron в Ubuntu
Как запускать задачу каждые 10 минут?
Используйте шаг: */10 * * * * команда
Почему cron не видит переменные окружения?
Cron запускается в минимальном окружении. Всегда указывайте полные пути к программам или задавайте переменные в начале crontab.
Как выполнить задачу при перезагрузке?
Используйте @reboot вместо временных полей: @reboot /path/to/script
Можно ли использовать cron для задач с GUI?
Да, но нужно указать переменную DISPLAY: DISPLAY=:0 перед командой и использовать xhost для разрешений.
Где хранятся файлы crontab?
Пользовательские — в /var/spool/cron/crontabs/, системные — в /etc/cron.d/ и поддиректориях.