Пост

Cron и Crontab. Полное руководство по планированию задач в Linux

Cron — это системная служба в Linux и Unix-подобных операционных системах, которая позволяет автоматически выполнять команды и скрипты по расписанию. Crontab (cron table) — это файл конфигурации, содержащий расписание выполнения задач. Это мощный инструмент для автоматизации рутинных задач, таких как резервное копирование, обновление системы, отправка уведомлений и многое другое.

Cron и Crontab: Полное руководство по планированию задач в Linux

Введение

Cron — это системная служба в Linux и Unix-подобных операционных системах, которая позволяет автоматически выполнять команды и скрипты по расписанию. Crontab (cron table) — это файл конфигурации, содержащий расписание выполнения задач. Это мощный инструмент для автоматизации рутинных задач, таких как резервное копирование, обновление системы, отправка уведомлений и многое другое.

Основы Cron

Cron работает как демон (фоновый процесс), который постоянно проверяет crontab файлы на наличие задач для выполнения. Система использует шестипольную структуру для определения времени выполнения:

  • Минуты (0-59)
  • Часы (0-23)
  • Дни месяца (1-31)
  • Месяцы (1-12)
  • Дни недели (0-7, где 0 и 7 = воскресенье)
  • Команда для выполнения

Символы и синтаксис Cron

Ниже представлена таблица с различными символами, которые можно использовать в cron-задачах, и их назначением:

Символ Описание Пример Результат
* Любое значение * * * * * Каждую минуту
, Перечисление значений 15,45 * * * * В 15 и 45 минут каждого часа
- Диапазон значений 0 9-17 * * * Каждый час с 9:00 до 17:00
/ Шаг (интервал) */15 * * * * Каждые 15 минут
L Последний день (в некоторых системах) 0 0 L * * В последний день месяца
W Ближайший рабочий день 0 0 1W * * В первый рабочий день месяца
# N-ый день недели в месяце 0 0 * * 1#2 Второй понедельник каждого месяца

Просмотр существующих cron-задач

Чтобы посмотреть текущие задачи текущего пользователя:

1
crontab -l

Для просмотра задач другого пользователя (требуются права root):

1
sudo crontab -u username -l

Редактирование crontab

Для редактирования cron-задач текущего пользователя:

1
crontab -e

При первом использовании вам будет предложено выбрать редактор. Рекомендуется выбрать nano для простоты использования.

Синтаксис crontab

Основной формат записи:

1
2
3
4
5
6
7
8
* * * * * команда_для_выполнения
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └── День недели (0-7)
│ │ │ └──── Месяц (1-12)
│ │ └────── День месяца (1-31)
│ └──────── Часы (0-23)
└────────── Минуты (0-59)

Примеры cron-задач

Ежедневное выполнение в 2:30 утра:

1
30 2 * * * /home/pi/backup.sh

Выполнение каждые 15 минут:

1
*/15 * * * * /usr/bin/python3 /home/pi/script.py

Выполнение по рабочим дням в 9:00:

1
0 9 * * 1-5 /home/pi/daily_report.sh

Выполнение в первое число каждого месяца:

1
0 0 1 * * /home/pi/monthly_cleanup.sh

Специальные строки

Cron поддерживает специальные ключевые слова для упрощения настройки:

Ежегодно (1 января, 00:00):

1
@yearly /home/pi/yearly_backup.sh

Ежемесячно (1 число, 00:00):

1
@monthly /home/pi/monthly_report.sh

Еженедельно (воскресенье, 00:00):

1
@weekly /home/pi/weekly_cleanup.sh

Ежедневно (00:00):

1
@daily /home/pi/daily_backup.sh

При каждой перезагрузке:

1
@reboot /home/pi/startup_script.sh

Системные crontab файлы

Помимо пользовательских crontab, существуют системные файлы:

  • /etc/crontab — системные задачи
  • /etc/cron.d/ — дополнительные конфигурации
  • /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ — директории для периодических задач

Переменные окружения

В crontab можно задавать переменные окружения:

1
2
3
4
5
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=user@example.com

0 * * * * /home/pi/hourly_task.sh

Перенаправление вывода

Для управления выводом команд:

1
2
3
4
5
6
7
8
# Перенаправление в файл
0 * * * * /home/pi/script.sh > /home/pi/logs/script.log 2>&1

# Отправка вывода на email (если настроен MTA)
0 * * * * /home/pi/script.sh | mail -s "Cron Output" user@example.com

# Игнорирование вывода
0 * * * * /home/pi/script.sh > /dev/null 2>&1

Практические примеры использования

Автоматическое обновление системы:

1
0 3 * * 6 sudo apt update && sudo apt upgrade -y

Резервное копирование базы данных:

1
0 2 * * * /usr/bin/mysqldump -u username -p password database > /backups/db_backup.sql

Мониторинг дискового пространства:

1
0 9 * * * df -h | mail -s "Disk Usage Report" admin@example.com

Очистка временных файлов:

1
0 4 * * * find /tmp -type f -mtime +7 -delete

Управление cron-задачами

Удаление всех cron-задач:

1
crontab -r

Удаление с подтверждением:

1
crontab -i -r

Редактирование задач другого пользователя:

1
sudo crontab -u username -e

Типичные проблемы и решения

Проблема: Cron задача не выполняется

  • Решение: Проверьте синтаксис crontab и пути к исполняемым файлам
  • Убедитесь, что скрипт имеет права на выполнение: chmod +x script.sh

Проблема: Команда работает в терминале, но не в cron

  • Решение: Укажите полные пути к командам и файлам
  • Проверьте переменные окружения в crontab

Проблема: Нет вывода или ошибок

  • Решение: Добавьте перенаправление вывода в файл для отладки
  • Проверьте системные логи: grep CRON /var/log/syslog

Проблема: Задача выполняется в неправильное время

  • Решение: Проверьте часовой пояс системы и синтаксис времени в crontab
  • Убедитесь, что серверное время корректно

Проблема: Недостаточно прав для выполнения команды

  • Решение: Используйте sudo в crontab (с осторожностью) или настройте права properly
  • Рассмотрите добавление задачи в системный crontab

Лучшие практики

  • Всегда используйте полные пути к командам и файлам
  • Тестируйте команды в терминале перед добавлением в cron
  • Ведение логов для отладки и мониторинга
  • Регулярно проверяйте актуальность cron-задач
  • Используйте комментарии для описания назначения задач
  • Будьте осторожны с задачами, требующими прав root

Cron является мощным и надежным инструментом для автоматизации задач в Linux. При правильном использовании он может значительно упростить администрирование системы и выполнение регулярных операций. Помните о безопасности и всегда тестируйте новые задачи перед добавлением в рабочую среду.

Авторский пост защищен лицензией CC BY 4.0 .

© evdokimoff. Некоторые права защищены.

Использует тему Chirpy для Jekyll