Управление Cron-заданиями: создание расписаний
Создание и управление запланированными задачами в Linux с помощью crontab: синтаксис cron-выражений, практические примеры, логирование и избежание типичных ошибок.
Содержание
Управление Cron-заданиями: создание расписаний
Cron — это планировщик задач в Linux, который автоматически запускает команды и скрипты в заданное время или с заданными интервалами. Он незаменим для автоматизации повторяющихся задач: резервного копирования, очистки логов, проверки обновлений.
Служба cron установлена и работает по умолчанию на большинстве дистрибутивов Linux. Проверьте её статус командой systemctl status cron или systemctl status crond.
Синтаксис crontab
Каждое cron-задание состоит из пяти полей времени и выполняемой команды:
* * * * * /путь/к/команде
│ │ │ │ │
│ │ │ │ └── День недели (0-7, 0 и 7 = воскресенье)
│ │ │ └──── Месяц (1-12)
│ │ └────── День месяца (1-31)
│ └──────── Час (0-23)
└────────── Минута (0-59)
Специальные символы
| Символ | Значение | Пример |
|---|---|---|
* | Любое значение | * * * * * = каждую минуту |
, | Несколько значений | 1,15 * * * * = в 1-ю и 15-ю минуту |
- | Диапазон | 1-5 * * * * = минуты с 1 по 5 |
/ | Шаг | */5 * * * * = каждые 5 минут |
Практические примеры cron-выражений
# Запускать каждую минуту
* * * * * /usr/bin/script.sh
# Запускать каждый час в начале часа
0 * * * * /usr/bin/script.sh
# Запускать каждый день в 02:30
30 2 * * * /usr/bin/backup.sh
# Запускать каждый понедельник в 08:00
0 8 * * 1 /usr/bin/weekly-report.sh
# Запускать 1-го числа каждого месяца в полночь
0 0 1 * * /usr/bin/monthly-cleanup.sh
# Запускать каждые 5 минут
*/5 * * * * /usr/bin/check-service.sh
# Запускать в будние дни (пн-пт) в 09:00
0 9 * * 1-5 /usr/bin/workday-task.sh
# Запускать каждые 6 часов
0 */6 * * * /usr/bin/sync.sh
Специальные сокращения
@reboot # Один раз при запуске системы
@yearly # Раз в год (0 0 1 1 *)
@monthly # Раз в месяц (0 0 1 * *)
@weekly # Раз в неделю (0 0 * * 0)
@daily # Раз в день (0 0 * * *)
@hourly # Раз в час (0 * * * *)
Использование crontab
Редактирование crontab
# Редактировать crontab текущего пользователя
crontab -e
# Редактировать crontab конкретного пользователя (требуется root)
crontab -u имя_пользователя -e
# Просмотреть текущий crontab
crontab -l
# Удалить crontab (используйте с осторожностью!)
crontab -r
Команда crontab -r удаляет все ваши cron-задания без возможности восстановления. Сначала сделайте резервную копию: crontab -l > crontab_backup.txt.
Первое редактирование crontab
# Запустите crontab -e
crontab -e
# Если предложат выбрать редактор, выберите nano (вариант 1)
# Добавьте задание в конец файла:
30 2 * * * /home/user/backup.sh
# Сохраните и выйдите: Ctrl+X, Y, Enter (для nano)
Системные cron-файлы
Для системных cron-заданий используются директории /etc/cron*:
# Структура директорий
/etc/crontab # Основной системный crontab
/etc/cron.d/ # Cron-файлы приложений
/etc/cron.hourly/ # Скрипты, запускаемые ежечасно
/etc/cron.daily/ # Скрипты, запускаемые ежедневно
/etc/cron.weekly/ # Скрипты, запускаемые еженедельно
/etc/cron.monthly/ # Скрипты, запускаемые ежемесячно
Логирование cron
Мониторинг лог-файлов
# Логи cron на Debian/Ubuntu
sudo tail -f /var/log/syslog | grep CRON
# На RHEL/CentOS
sudo tail -f /var/log/cron
# С помощью journald
sudo journalctl -u cron -f
Перенаправление вывода в файл
# Перенаправить stdout и stderr в файл
30 2 * * * /usr/bin/backup.sh >> /var/log/backup.log 2>&1
# Записывать только ошибки
30 2 * * * /usr/bin/backup.sh 2>> /var/log/backup-errors.log
# Подавить весь вывод
30 2 * * * /usr/bin/backup.sh > /dev/null 2>&1
Настройте logrotate для ротации лог-файлов, чтобы они не росли бесконечно.
Типичные ошибки и решения
1. Проблемы с переменными окружения
Cron не наследует переменные окружения пользовательской оболочки. Определяйте PATH и другие переменные явно:
# Добавьте в начало crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash
# Или используйте полные пути в командах
30 2 * * * /usr/bin/python3 /home/user/script.py
2. Права на выполнение скрипта
# Дать права на выполнение
chmod +x /home/user/backup.sh
# Проверить права
ls -la /home/user/backup.sh
3. Проблемы с рабочей директорией
# Явно указать рабочую директорию в cron-задании
30 2 * * * cd /var/www/html && php artisan schedule:run
Заключение
Cron — один из фундаментальных инструментов системного администрирования Linux. С правильным синтаксисом, управлением переменными окружения и логированием вы можете создать надёжную автоматизацию. Регулярно проверяйте задания с помощью crontab -l и следите за лог-файлами для раннего обнаружения проблем.
Связанные статьи
Подключение к VDS по SSH: PuTTY, терминал и SSH-ключи
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Подключение к Windows VDS по RDP: полное руководство
Пошаговое руководство по RDP-подключению к Windows Server VDS: настройка, безопасность NLA, правило фильтрации Path Panel и устранение неполадок.
Смена ОС VDS-сервера: пошаговое руководство (Reinstall)
Смена операционной системы VDS через панель REXE: советы по резервному копированию, поддерживаемые дистрибутивы Linux и версии Windows Server.