Демон 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 запускается при старте операционной системы и работает постоянно. Его работа основана на трёх ключевых компонентах:
- Демон-планировщик (cron daemon) — процесс, который «просыпается» каждую минуту и проверяет, есть ли задачи, запланированные на текущее время.
- Файлы расписаний (crontab) — текстовые файлы, содержащие строки с командами и временем их выполнения.
- Команда 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
БАБЛО →