Перейти к основному содержимому
Вернуться в категорию

Управление Cron-заданиями: создание расписаний

Создание и управление запланированными задачами в Linux с помощью crontab: синтаксис cron-выражений, практические примеры, логирование и избежание типичных ошибок.

Время чтения: 10 мин Управление сервером
croncronjobcrontabрасписаниеlinuxавтоматизациясервер

Содержание

Управление 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-выражений

hljs bash
# Запускать каждую минуту
* * * * * /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

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

hljs bash
@reboot    # Один раз при запуске системы
@yearly    # Раз в год (0 0 1 1 *)
@monthly   # Раз в месяц (0 0 1 * *)
@weekly    # Раз в неделю (0 0 * * 0)
@daily     # Раз в день (0 0 * * *)
@hourly    # Раз в час (0 * * * *)

Использование crontab

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

hljs bash
# Редактировать crontab текущего пользователя
crontab -e

# Редактировать crontab конкретного пользователя (требуется root)
crontab -u имя_пользователя -e

# Просмотреть текущий crontab
crontab -l

# Удалить crontab (используйте с осторожностью!)
crontab -r

Команда crontab -r удаляет все ваши cron-задания без возможности восстановления. Сначала сделайте резервную копию: crontab -l > crontab_backup.txt.

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

hljs bash
# Запустите crontab -e
crontab -e

# Если предложат выбрать редактор, выберите nano (вариант 1)
# Добавьте задание в конец файла:
30 2 * * * /home/user/backup.sh

# Сохраните и выйдите: Ctrl+X, Y, Enter (для nano)

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

Для системных cron-заданий используются директории /etc/cron*:

hljs bash
# Структура директорий
/etc/crontab          # Основной системный crontab
/etc/cron.d/          # Cron-файлы приложений
/etc/cron.hourly/     # Скрипты, запускаемые ежечасно
/etc/cron.daily/      # Скрипты, запускаемые ежедневно
/etc/cron.weekly/     # Скрипты, запускаемые еженедельно
/etc/cron.monthly/    # Скрипты, запускаемые ежемесячно

Логирование cron

Мониторинг лог-файлов

hljs bash
# Логи 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

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

hljs bash
# Перенаправить 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 и другие переменные явно:

hljs bash
# Добавьте в начало 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. Права на выполнение скрипта

hljs bash
# Дать права на выполнение
chmod +x /home/user/backup.sh

# Проверить права
ls -la /home/user/backup.sh

3. Проблемы с рабочей директорией

hljs bash
# Явно указать рабочую директорию в cron-задании
30 2 * * * cd /var/www/html && php artisan schedule:run

Заключение

Cron — один из фундаментальных инструментов системного администрирования Linux. С правильным синтаксисом, управлением переменными окружения и логированием вы можете создать надёжную автоматизацию. Регулярно проверяйте задания с помощью crontab -l и следите за лог-файлами для раннего обнаружения проблем.