В мире Linux есть незаметный, но могущественный инструмент, который работает как ваш личный временной архитектор. Cron — это планировщик задач, который позволяет автоматизировать рутинные операции, от простых резервных копий до сложных системных скриптов. Освоив его, вы превратите сервер из послушного исполнителя в предсказующего партнёра, который работает, пока вы спите.
Что такое Cron и зачем он нужен?
Cron — это демон (фоновая служба), который выполняет команды по расписанию. Он читает конфигурационные файлы (crontab) и запускает задачи в указанное время. Представьте: автоматическое обновление системы в 3 ночи, резервное копирование базы данных каждый час, отправка отчётов по email каждое утро понедельника — всё это возможно без вашего вмешательства.
Каждый пользователь системы имеет свой собственный файл crontab. Также существует системный crontab (/etc/crontab и файлы в /etc/cron.d/), который обычно требует прав суперпользователя для редактирования.
Структура crontab записи
Каждая строка задачи в crontab состоит из шести полей:
- Минуты (0-59)
- Часы (0-23)
- День месяца (1-31)
- Месяц (1-12 или jan,feb,mar...)
- День недели (0-7, где 0 и 7 = воскресенье, или mon,tue,wed...)
- Команда для выполнения
Примеры расписаний
0 3 * * * /backup.sh— каждый день в 3:00*/15 * * * * /check_status.sh— каждые 15 минут0 9 * * 1 /send_report.sh— каждый понедельник в 9:0030 18 1 * * /monthly_task.sh— первого числа каждого месяца в 18:30
Практическая настройка: шаг за шагом
1. Открытие crontab для редактирования
Для текущего пользователя:
crontab -e
При первом запуске вам предложат выбрать текстовый редактор (обычно nano или vim).
2. Добавление задачи
В открывшемся редакторе добавьте строку с вашей задачей. Например, для ежедневной очистки временных файлов в 2:30 ночи:
30 2 * * * rm -rf /tmp/*
Всегда используйте абсолютные пути к скриптам и командам в cron! Cron выполняется в минимальном окружении и может не знать о ваших переменных PATH.
3. Просмотр текущих задач
crontab -l
4. Удаление всех задач
crontab -r
Будьте осторожны — эта команда удаляет ВСЕ задачи без подтверждения!
Продвинутые техники
Перенаправление вывода
Cron по умолчанию отправляет вывод на email пользователя. Чтобы сохранить в файл или отключить:
0 4 * * * /script.sh > /var/log/myscript.log 2>&1
0 5 * * * /script.sh > /dev/null 2>&1 # полное отключение вывода
Специальные строки
Cron поддерживает удобные сокращения:
@reboot— при загрузке системы@dailyили@midnight— раз в день (00:00)@weekly— раз в неделю (воскресенье 00:00)@monthly— раз в месяц (первое число 00:00)@yearlyили@annually— раз в год (1 января 00:00)
Системные cron задачи
Для задач, требующих прав root, или общесистемных задач:
sudo crontab -e
Или поместите файл в /etc/cron.d/ с соответствующими правами.
Каталоги /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ содержат скрипты, которые выполняются соответственно каждый час, день, неделю и месяц. Просто поместите исполняемый скрипт в нужный каталог!
Отладка и мониторинг
Если задача не выполняется:
- Проверьте логи Cron:
grep CRON /var/log/syslog - Убедитесь, что демон cron запущен:
systemctl status cron - Проверьте права на выполнение скрипта:
chmod +x /path/to/script.sh - Временно добавьте запись в лог-файл в начале скрипта для отслеживания
Безопасность и лучшие практики
- Не запускайте задачи от root без необходимости
- Проверяйте скрипты на ошибки перед добавлением в cron
- Используйте абсолютные пути везде
- Ограничивайте права доступа к конфигурационным файлам
- Ведите логи выполнения важных задач
- Регулярно проверяйте список активных задач
FAQ: Часто задаваемые вопросы
Как запускать задачу каждые 10 минут?
Используйте шаг: */10 * * * * /command или перечисление: 0,10,20,30,40,50 * * * * /command
Почему мой скрипт работает вручную, но не из cron?
Скорее всего, проблема в окружении. Cron использует минимальное окружение. Указывайте абсолютные пути, а в начале скрипта устанавливайте нужные переменные окружения.
Можно ли запускать задачу раз в 2 часа?
Да: 0 */2 * * * /command — в 0 минут каждого чётного часа (0:00, 2:00, 4:00...)
Как редактировать crontab другого пользователя?
С правами root: crontab -u username -e
Где хранится файл crontab пользователя?
Обычно в /var/spool/cron/crontabs/username, но редактировать его нужно только через команду crontab -e.
Можно ли использовать переменные в crontab?
Да, в начале файла можно определить переменные окружения, например:PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Cron — это не просто инструмент, а философия автоматизации. Начав с простых задач очистки, вы постепенно придёте к сложным пайплайнам обработки данных, которые превращают ваш сервер в отлаженный механизм, работающий как швейцарские часы. Главное — начать, и время станет вашим союзником.