Агенты и cron в 1С-Битрикс: как вынести фоновые задачи из хитов

В 1С-Битрикс часть служебных операций может выполняться через механизм агентов. Для небольшого проекта это часто незаметно, но по мере роста сайта фоновые задачи начинают влиять на время ответа: первый посетитель после паузы может фактически «запустить» очистку данных, пересчёт, отправку уведомлений или другую тяжёлую операцию.
Если задача должна выполняться регулярно и не зависит от открытия конкретной страницы, её разумно отделить от пользовательского запроса. Для этого используют cron и стандартный механизм запуска агентов.
Чем агент отличается от обычного cron-задания
Агент хранится внутри Битрикс: система знает функцию, время следующего запуска и периодичность. Cron находится на уровне операционной системы и просто запускает команду по расписанию. На практике эти механизмы удобно объединять: расписание задаёт cron, а уже стандартный скрипт Битрикс обрабатывает очередь агентов.
Так сохраняется управление агентами из административной части, но тяжёлая фоновая работа перестаёт зависеть от реального посетителя сайта.
Когда стоит переносить выполнение с хитов
- на сайте есть регулярные импорты, синхронизации или очистка данных;
- периодически первый запрос открывается заметно дольше остальных;
- почтовые события и фоновые операции накапливаются при низкой посещаемости;
- агенты обращаются к внешним API или обрабатывают большие объёмы данных;
- важно, чтобы задача запускалась по расписанию, а не при появлении пользователя.
Почему нельзя просто добавить второй запуск
Одна из типичных ошибок — оставить старый механизм выполнения и параллельно добавить собственный cron. В результате одна логика может выполняться из двух контекстов. Для операций без защиты от повторного запуска это приводит к дублям, повторным письмам, двойному импорту или конкурирующим процессам.
Перед переносом фоновых задач сначала определите, кто именно будет отвечать за запуск: хит пользователя, стандартный cron Битрикс или отдельный серверный сценарий.
Что проверить после настройки
Сам факт наличия строки в crontab ещё не означает, что всё работает. Нужно проверить системный журнал cron, PHP-ошибки, время последнего выполнения агента и реальный результат задачи. Особенно важно убедиться, что в CLI используется нужная версия PHP и тот же набор расширений, который необходим проекту.
Если агент может выполняться долго, полезно добавить блокировку от параллельного старта и отдельное журналирование начала, окончания и ошибки. Тогда при сбое будет понятно, задача не стартовала вообще или остановилась уже внутри бизнес-логики.
Какие задачи лучше не превращать в агенты
Если операция должна запускаться в строго определённую минуту, требует отдельного окружения или относится к самостоятельному сервисному скрипту, обычный системный cron часто проще и прозрачнее. Агент удобен там, где задача логически является частью проекта Битрикс и ею нужно управлять вместе с приложением.
Безопасная схема переноса
- Составьте список активных агентов и измерьте время их выполнения.
- Отдельно отметьте тяжёлые операции и задачи, которые должны работать при низкой посещаемости.
- Настройте стандартный запуск агентов через cron согласно конфигурации сервера.
- Проверьте, что выполнение на хитах не создаёт второй параллельный сценарий.
- Добавьте логирование для критичных фоновых операций.
- После переноса несколько дней контролируйте время запуска и ошибки.
Если сайт периодически «подвисает» без очевидной причины, фоновые процессы стоит проверять вместе с PHP, базой данных и кешированием. Общий порядок диагностики собран в статье про ускорение сайта на 1С-Битрикс.
Настройку cron, PHP-FPM и фоновых процессов можно выполнять в рамках технической поддержки сайта.