Linux

Автоматизируйте задачи в Linux с помощью cron: полное руководство

Краткое руководство по планированию и запуску задач в Linux через cron. Вы научитесь создавать расписания, управлять заданиями и проверять выполнение без ручного вмешательства.

Обновлено 28 апреля 2026 г.
15-20 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04 LTS и вышеDebian 11+CentOS Stream 9Fedora 38+

Введение / Зачем это нужно

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

Требования / Подготовка

  • Система на базе Linux (Ubuntu 22.04+, Debian 11+, CentOS Stream 9 или Fedora 38+).
  • Пользователь с правами на выполнение crontab (обычный пользователь или root).
  • Установленный пакет cron (в большинстве дистрибутивов он предустановлен; при необходимости выполните sudo apt install cron или sudo dnf install cronie).
  • Базовое понимание командной строки и абсолютных путей.

Шаг 1: Открыть планировщик для редактирования

Запустите команду:

crontab -e
  • Для текущего пользователя это откроет его личное расписание.
  • Для root используйте sudo crontab -e, чтобы управлять системными заданиями.

При первом запуске система может предложить выбрать редактор. Выберите тот, который вам удобен (например, nano).

Шаг 2: Понять формат строки задания

Каждая строка в crontab состоит из пяти полей времени и команды:

* * * * * команда
│ │ │ │ │
│ │ │ │ └─── день недели (0–7, где 0 и 7 — воскресенье)
│ │ │ └───── месяц (1–12)
│ │ └─────── день месяца (1–31)
│ └───────── час (0–23)
└─────────── минута (0–59)

Примеры:

  • Каждую минуту: * * * * * /path/to/script.sh
  • Каждый день в 03:30: 30 3 * * * /path/to/script.sh
  • Каждый понедельник в 08:00: 0 8 * * 1 /path/to/script.sh

Шаг 3: Добавить переменные окружения при необходимости

В crontab можно задать переменные перед списком заданий. Это полезно, если скрипт зависит от конкретного PATH или локали.

Пример:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8

Добавьте такие строки в начале файла, если ваши задания не находят команды или требуют определённой локали.

Шаг 4: Использовать абсолютные пути в командах

Cron запускает задания с минимальным окружением. Всегда указывайте полный путь к скриптам и исполняемым файлам. Например:

* * * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Здесь:

  • /home/user/scripts/backup.sh — абсолютный путь к скрипту.
  • >> /var/log/backup.log — добавление стандартного вывода в лог.
  • 2>&1 — перенаправление ошибок в тот же файл.

Шаг 5: Сохранить и проверить статус cron

После сохранения изменений проверьте, что cron обработал задание:

  • В Ubuntu/Debian:
grep CRON /var/log/syslog
  • В системах с systemd (CentOS/Fedora):
journalctl -u crond --since "1 minute ago"

Вы должны увидеть строки, подтверждающие загрузку или выполнение задания.

Проверка результата

Чтобы убедиться, что задание работает:

  • Дождитесь времени выполнения по расписанию и проверьте целевой файл или лог.
  • Временно добавьте простое задание для теста, например:
* * * * * /bin/date >> /tmp/cron-test.log
  • Подождите минуту и выполните:
cat /tmp/cron-test.log

Если время обновляется — cron работает корректно.

Возможные проблемы

  • Команда не найдена. Укажите абсолютный путь и, при необходимости, настрой PATH в начале crontab.
  • Нет прав на выполнение. Убедитесь, что скрипт имеет бит выполнения: chmod +x /path/to/script.sh.
  • Ошибки в окружении. Добавьте экспорт переменных или запускайте скрипт через оболочку явно: /bin/bash /path/to/script.sh.
  • Логи не пишутся. Проверьте права на запись в файл лога и наличие свободного места на диске.

Часто задаваемые вопросы

Почему cron не запускает задачу, хотя она указана в crontab?
Как посмотреть, выполнялись ли задания cron?
В чём разница между crontab и systemd-таймерами?
Можно ли перенаправить вывод задания cron в файл?

Полезное

Открыть crontab для редактирования
Добавить задание с правильным синтаксисом
Сохранить и проверить ошибки