Открыть сервис

Демон cron

Демон cron — это программа-планировщик задач в операционных системах семейства Unix и Unix-подобных (включая Linux и macOS), предназначенная для автоматического выполнения команд и скриптов в заданное время или по определённому расписанию. Работает в фоновом режиме (как демон), не требуя постоянного взаимодействия с пользователем. Название происходит от греческого слова «χρόνος» (chronos — время). Является стандартным компонентом большинства Unix-систем.

История

Идея автоматизации повторяющихся задач возникла на заре многопользовательских систем. Первым известным планировщиком была программа at, появившаяся в Unix Version 7 (1979) и позволявшая однократное выполнение команды в указанное время. Однако для регулярных задач требовалась более гибкая система.

Демон cron был создан в 1975 году в Калифорнийском университете в Беркли в рамках разработки BSD (Berkeley Software Distribution). Его автором считается Кен Томпсон (один из создателей Unix). Первая версия cron была простой: она считывала файл /etc/crontab каждую минуту и выполняла команды, время которых совпадало с текущим. В 1985 году в версии 4.3BSD появилась более эффективная реализация, которая не перечитывала файл каждую минуту, а вычисляла время следующего запуска и «засыпала» до него.

Дальнейшее развитие привело к появлению нескольких независимых реализаций. В 1987 году Пол Викси (Paul Vixie) написал версию cron (Vixie cron), которая стала стандартом в системах BSD и Linux. Она поддерживала расширенный синтаксис, включая диапазоны и шаги. В 1990-х годах в Linux появилась версия mcron (от GNU), а в 2000-х — anacron, предназначенная для систем, которые не работают круглосуточно (например, ноутбуки). В современных дистрибутивах Linux чаще всего используется Vixie cron или его форки (cronie, bcron).

Принцип работы

Демон cron запускается при старте операционной системы и работает постоянно. Его работа основана на трёх ключевых компонентах:

  1. Демон-планировщик (cron daemon)процесс, который «просыпается» каждую минуту и проверяет, есть ли задачи, запланированные на текущее время.
  2. Файлы расписаний (crontab) — текстовые файлы, содержащие строки с командами и временем их выполнения.
  3. Команда crontab — утилита, позволяющая пользователям редактировать свои файлы расписаний.

Файлы crontab

Существует два основных типа файлов crontab:

  • Системный crontab (/etc/crontab) — глобальный файл, доступный только суперпользователю (root). В нём можно указывать пользователя, от имени которого будет выполняться команда.
  • Пользовательские crontab — файлы, хранящиеся в каталоге /var/spool/cron/crontabs/ (или аналогичном) и принадлежащие конкретным пользователям. Каждый пользователь может иметь свой собственный crontab, создаваемый командой crontab -e.

Синтаксис строки crontab

Каждая строка в crontab имеет следующий формат (для пользовательского crontab):

`` минута час день_месяца месяц день_недели команда ``

Поля разделяются пробелами или табуляцией. Допустимые значения:

ПолеДиапазонОписание
минута0–59Минута часа
час0–23Час дня (0 — полночь)
день_месяца1–31День месяца
месяц1–12 (или названия: jan, feb, ...)Месяц года
день_недели0–7 (0 и 7 — воскресенье)День недели

В каждом поле можно использовать:

  • **Звёздочка (*)** — любое значение (например, * в поле «час» означает каждый час).
  • Диапазоны — через дефис (например, 1-5 для дней недели — понедельник–пятница).
  • Списки — через запятую (например, 0,15,30,45 для минут).
  • Шаги — через слэш (например, */5 в поле «минута» — каждые 5 минут).
  • Комбинации — например, 0-30/5 — каждые 5 минут с 0 по 30 минуту.

Примеры записей:

  • 0 5 * /usr/bin/backup.sh — запускать скрипт резервного копирования каждый день в 5:00.
  • /15 * /usr/bin/check_mail — проверять почту каждые 15 минут.
  • 0 0 1 /usr/bin/clean_logs — очищать логи в первый день каждого месяца в полночь.
  • 30 8 1-5 /usr/bin/send_report — отправлять отчёт в 8:30 по будням.

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

Некоторые реализации cron поддерживают псевдонимы для часто используемых расписаний:

  • @reboot — выполнить один раз при запуске демона.
  • @yearly или @annually — выполнить 1 января в 0:00.
  • @monthly — выполнить в первый день месяца в 0:00.
  • @weekly — выполнить в воскресенье в 0:00.
  • @daily — выполнить каждый день в 0:00.
  • @hourly — выполнить каждый час в 0 минут.

Реализации и их особенности

Vixie cron

Наиболее распространённая реализация. Отличается надёжностью, простотой и поддержкой стандартного синтаксиса. Используется в большинстве дистрибутивов Linux (через пакет cronie, который является форком Vixie cron).

cronie

Форк Vixie cron, разрабатываемый сообществом Fedora и Red Hat. Включает дополнительные возможности, такие как поддержка PAM (Pluggable Authentication Modules) и SELinux (Security-Enhanced Linux). Является стандартным планировщиком в Red Hat Enterprise Linux, CentOS, Fedora и их производных.

anacron

Предназначен для систем, которые не работают непрерывно (например, настольные компьютеры или ноутбуки). В отличие от cron, anacron не привязан к точному времени суток — он выполняет задачи, которые были пропущены во время простоя системы, при следующем включении. Использует собственные файлы конфигурации (обычно /etc/anacrontab). Часто используется совместно с cron: cron запускает anacron для выполнения ежедневных, еженедельных и ежемесячных задач.

bcron

Реализация, разработанная Дэниелом Бернстайном (Daniel J. Bernstein). Отличается модульной архитектурой и повышенной безопасностью. Каждый компонент (например, чтение crontab, выполнение команды) работает как отдельный процесс с минимальными привилегиями. Используется в некоторых специализированных системах.

systemd-timers

В современных дистрибутивах Linux, использующих systemd, планировщик задач может быть реализован через systemd-timers. Это альтернатива cron, которая интегрируется с системой инициализации systemd. Позволяет задавать более сложные условия запуска (например, «через 5 минут после загрузки» или «когда система неактивна»). Однако cron остаётся более простым и привычным инструментом для многих администраторов.

Применение

Демон cron широко используется в системном администрировании и разработке для автоматизации рутинных задач:

  • Резервное копирование — создание копий баз данных, файловых систем, конфигураций.
  • Обновление систем — автоматическая установка обновлений безопасности (например, с помощью unattended-upgrades).
  • Очистка временных файловудаление логов, кэша, корзины.
  • Мониторинг — проверка доступности серверов, отправка уведомлений о сбоях.
  • Генерация отчётов — сбор статистики, создание дайджестов.
  • Планирование задач в веб-приложениях — например, отправка писем, обработка очередей, обновление кэша.
  • Научные расчёты — запуск длительных вычислений в ночное время.

Безопасность и ограничения

Демон cron работает с привилегиями суперпользователя (root) и может выполнять команды от имени любого пользователя. Это делает его потенциальной целью для атак. Для повышения безопасности используются следующие механизмы:

  • Ограничение доступа — файлы /etc/cron.allow и /etc/cron.deny определяют, какие пользователи могут создавать свои crontab.
  • Запуск с минимальными привилегиями — команды выполняются от имени того пользователя, который создал задачу.
  • Логирование — все действия cron записываются в системный журнал (syslog), что позволяет отследить несанкционированные изменения.

Альтернативы

Помимо cron и systemd-timers, существуют другие планировщики задач:

  • Windows Task Scheduler — встроенный планировщик в операционных системах Microsoft Windows.
  • Jenkinsсервер автоматизации, часто используемый в CI/CD (Continuous Integration/Continuous Deployment).
  • Airflow — платформа для оркестрации рабочих процессов, популярная в области обработки данных.
  • Rundeck — инструмент для управления задачами и автоматизации операций.

Интересные факты

  • В некоторых системах демон cron называется crond (cron daemon).
  • Символ * в crontab иногда называют «звёздочкой» или «wildcard» (подстановочный знак).
  • В 2010 году была обнаружена уязвимость в Vixie cron (CVE-2010-0297), позволявшая локальному пользователю повысить привилегии до root. Проблема была исправлена в последующих версиях.
  • Существует онлайн-сервисы для генерации crontab-строк (например, crontab.guru), которые помогают новичкам составлять правильные расписания.

Источники

  • FreeBSD Handbook. Chapter 10. Configuring the System: Scheduling Tasks.
  • Linux man pages: cron(8), crontab(5), anacron(8).
  • Stevens, W. Richard. Advanced Programming in the UNIX Environment. 3rd ed. Addison-Wesley, 2013.
  • Vixie, Paul. «Cron: A Background Job Scheduler». Proceedings of the USENIX Summer 1987 Conference.
  • Документация проекта cronie (https://github.com/cronie-crond/cronie).

Найди прибыльный бизнес на BFOmetr.ru

БАБЛО →