Cron
Cron (англ. Cron, от греч. хронос — время) — это классический системный демон-планировщик задач (background daemon crond) в операционных системах семейств Linux и Unix, предназначенный для автоматического периодического выполнения консольных утилит, системных команд и скриптов по строго заданному временному расписанию. В сфере веб-разработки, серверного администрирования и управления сайтами Cron выступает ключевым инструментом автоматизации рутинных процессов: он регулярно создает резервные копии баз данных СУБД, очищает устаревший системный кэш, отправляет очереди почтовых уведомлений, обновляет товарные каталоги и формирует поисковые карты Sitemap без участия человека.
1 Принцип работы и архитектура демона crond
Функционирование планировщика в Linux базируется на непрерывной работе фоновой службы crond (или cron), которая автоматически инициируется при загрузке операционной системы:
- Минутный цикл опроса: Каждую минуту системный процесс просыпается и сканирует конфигурационные директории (
/etc/crontab,/etc/cron.d/) и индивидуальные пользовательские файлы расписаний (обычно расположенные в/var/spool/cron/crontabs/). - Сравнение с системным временем: Если текущие значения минуты, часа, дня месяца, месяца или дня недели совпадают с маской задачи, демон порождает дочерний подпроцесс и исполняет команду от имени владельца расписания.
- Управление через утилиту crontab: Пользователи и системные администраторы взаимодействуют со своими заданиями с помощью консольной команды
crontab(флаг-eдля редактирования,-lдля просмотра списка,-rдля удаления). Доступ разграничивается системными спискамиcron.allowиcron.deny.
2 Синтаксис расписания: правило пяти полей
Каждая строка в таблице crontab состоит из пяти временных полей, разделенных пробелами, и непосредственно исполняемой команды:
* * * * * /путь/к/программе аргументы
│ │ │ │ │
│ │ │ │ └─ День недели (0–7, где 0 и 7 = воскресенье)
│ │ │ └────── Месяц (1–12)
│ │ └─────────── День месяца (1–31)
│ └──────────────── Час (0–23)
└───────────────────── Минута (0–59)
Для гибкой настройки периодичности запуска применяются специальные синтаксические операторы:
| Спецсимвол | Значение | Пример записи | Интерпретация |
|---|---|---|---|
| * (звездочка) | Любое допустимое значение поля. | * * * * * |
Выполнять каждую минуту непрерывно. |
| , (запятая) | Список конкретных дискретных значений. | 0 9,13,18 * * * |
Запуск ровно в 9:00, 13:00 и 18:00 ежедневно. |
| - (дефис) | Непрерывный диапазон чисел. | 0 10 * * 1-5 |
Запуск в 10:00 с понедельника по пятницу. |
| / (слэш) | Шаг периодичности интервала. | */15 * * * * |
Запуск каждые 15 минут круглосуточно. |
3 Ключевые сценарии применения Cron в веб-проектах
В современной веб-разработке и поддержке сайтов Cron берет на себя важнейшие сервисные контуры:
Резервное копирование и архивация
Ночной дамп баз данных через mysqldump и упаковка файлов сайта в ZIP-архивы с последующей отправкой в удаленное облачное хранилище и ротацией старых копий.
Синхронизация каталогов и цен
Регулярный импорт остатков из складских программ (1С, МойСклад), обновление курсов валют, выгрузка фидов для маркетплейсов и Яндекс Маркета.
Очереди почтовых рассылок
Пакетная отправка триггерных писем и уведомлений клиентам без создания пиковых нагрузок на почтовый сервер и без задержки ответа посетителю в браузере.
Системное обслуживание CMS
Вызов планировщика компонентов Joomla (Task Scheduler), очистка временных файлов, сброс переполненного файлового кэша и генерация sitemap.xml.
4 Системный Cron против веб-эмуляции (Web-Cron)
В популярных CMS часто встречается встроенный «псевдо-крон» (запуск фоновых задач при посещении страниц случайными пользователями). Сравним оба подхода:
| Критерий | Системный серверный Cron (Linux) | Эмуляция через Web / Посетителей |
|---|---|---|
| Точность расписания | Абсолютная: запуск происходит секунда в секунду по системному таймеру ОС. | Непредсказуемая: если ночью нет посетителей, задачи не выполнятся. |
| Лимиты времени (Timeouts) | Не ограничен лимитами веб-сервера (PHP CLI работает без max_execution_time). |
Жестко ограничен таймаутами Nginx и PHP-FPM (30–60 сек), риск обрыва бэкапа. |
| Влияние на скорость сайта | Нулевое: фоновый процесс работает в отдельном потоке на сервере. | Негативное: случайный посетитель ждет загрузки страницы дольше обычного. |
| Надежность | Максимальная промышленная надежность уровня операционной системы. | Низкая; риски дублирования запусков при наплыве трафика. |
5 Вопросы безопасности: Cron и защита от взлома
В информационной безопасности планировщик Cron является зоной повышенного внимания веб-мастеров и администраторов:
-
Закрепление злоумышленников (Persistence): При успешном взломе сайта хакеры часто добавляют вредоносную строку в crontab. Даже если владелец удалит вирусный PHP-скрипт с диска, планировщик каждую ночь будет заново скачивать и восстанавливать бэкдор (backdoor) или активировать скрытый майнер. Регулярная проверка
crontab -l— обязательный элемент аудита. -
Принцип наименьших привилегий: Задачи веб-проектов категорически запрещено запускать из-под учетной записи
root. Скрипты должны выполняться строго от имени локального пользователя веб-сервера, что предотвращает захват полного контроля над сервером при компрометации скрипта. -
Управление потоками вывода (I/O Redirection): По умолчанию Cron отправляет вывод каждой выполненной команды на локальную почту владельца. Если скрипт генерирует системные сообщения, почтовая очередь
mailqмгновенно переполняется тысячами писем. Стандартом является глушение стандартного вывода и ошибок в псевдоустройство:> /dev/null 2>&1либо запись в изолированный лог-файл.
6 Чек-лист лучших практик настройки Cron
Для безотказной и стабильной работы планировщика придерживайтесь профессиональных правил администрирования:
- Всегда используйте абсолютные пути: В окружении Cron переменная
$PATHминимальна. Всегда указывайте полный путь к бинарному файлу PHP и скрипту (например,/opt/php85/bin/php /var/www/site/cli/cron.php). - Защита от наложения процессов (Locking): Если тяжелая задача не успеет завершиться за выделенный интервал, планировщик запустит ее второй раз, перегружая CPU и диск. Используйте системную утилиту
flock(например,flock -n /tmp/task.lock /opt/php85/bin/php ...), чтобы предотвратить параллельный запуск. - Разносите пиковые задачи по времени: Не назначайте создание бэкапа, очистку базы и тяжелый импорт товаров на одну и ту же секунду (например, ровно на 03:00). Смещайте задачи на несколько минут (03:15, 03:40).
- Контролируйте размер логов: Если вывод скрипта пишется в отдельный файл лога, обязательно настройте для него правило ротации
logrotate, чтобы избежать неконтролируемого исчерпания свободного места на диске.

