Главная » Ошибки Битрикс » Агенты не выполняются в Битрикс: диагностика

Агенты не выполняются в Битрикс: диагностика

Схема диагностики невыполняющегося агента в 1С-Битрикс

Агент, который должен был отработать по расписанию, но не сработал, — одна из самых незаметных проблем: сайт продолжает нормально показываться посетителям, пока не выясняется, что синхронизация остатков не обновлялась неделю. Разберём порядок диагностики, когда агенты Битрикса перестают выполняться.

Первая проверка: активен ли агент вообще

В разделе НастройкиИнструменты разработчикаАгенты нужно убедиться, что интересующий агент присутствует в списке, помечен активным и время следующего запуска не находится в далёком прошлом без движения, — если агент вообще не найден в списке, вероятно, сама регистрация никогда не выполнялась или была случайно удалена при обновлении.

Проверка на автоматическую деактивацию

Как разобрано в материале про CAgent, функция агента автоматически деактивируется, если она не вернула строку повторного самовызова, — это самая частая причина, почему рабочий ранее агент вдруг перестаёт выполняться после безобидного, на первый взгляд, изменения кода функции. Проверка: если агент из списка пропал или помечен неактивным без явного вмешательства администратора, стоит в первую очередь проверить, что функция завершается штатно и возвращает нужную строку.

Нужна помощь с Битрикс?





    Необработанное исключение внутри функции агента

    <?php
    
    function syncStockBalances(): string
    {
        try {
            // ... логика синхронизации ...
        } catch (\Throwable $e) {
            AddMessage2Log('Agent error: ' . $e->getMessage(), 'my.module');
        }
    
        return 'syncStockBalances();';
    }

    Исключение, вылетевшее из тела функции без перехвата, прерывает выполнение до оператора return — с точки зрения системы это выглядит так же, как отсутствие возврата строки: агент деактивируется. Обёртка в try/catch с логированием ошибки — необходимый минимум для диагностики подобных сбоев в будущем, а не только способ их избежать.

    Нет запуска: визитов нет, cron не настроен

    Если агент активен и корректно возвращает строку самовызова, но всё равно не выполняется вовремя — вероятная причина в отсутствии триггера запуска. Штатный механизм "по визитам" срабатывает при заходе любого посетителя на сайт, но на малопосещаемых страницах или в ночное время визитов может просто не быть. Решение — настройка системного cron на файл agents.php, не зависящего от реального трафика.

    Превышение времени выполнения агента

    Агент, выполняющий тяжёлую операцию (обработка большого массива данных), может упираться в ограничение времени выполнения PHP-скрипта и прерываться на середине — это выглядит как "агент вроде запускается, но результат не завершён". Для таких задач правильнее разбивать обработку на порции с сохранением промежуточной позиции между запусками, а не пытаться обработать весь объём за один вызов.

    Проверка через ручной запуск

    В том же разделе агентов есть возможность запустить конкретный агент вручную немедленно, минуя ожидание расписания, — полезно для проверки, реально ли функция отрабатывает без ошибок в принципе, прежде чем разбираться, почему она не срабатывает автоматически по расписанию.

    Логирование как обязательная практика

    Агент без логирования результата своей работы — источник загадок: без явного лога успешного или неуспешного выполнения невозможно быстро отличить "агент не запускался" от "агент запустился, но упал с ошибкой" или "агент выполнился, но не сделал того, что ожидалось" — каждая из этих трёх ситуаций требует разного направления диагностики.

    Частые ошибки

    • Функция не возвращает строку повторного вызова. Самая частая причина автоматической деактивации агента.
    • Нет системного cron, только визиты. Агент срабатывает непредсказуемо редко на малопосещаемых страницах.
    • Отсутствует логирование результата работы агента. Невозможно быстро отличить причину сбоя без дополнительной диагностики.
    • Тяжёлая операция без разбивки на порции. Прерывание по ограничению времени выполнения посередине работы.

    Итог

    Диагностику невыполняющегося агента стоит начинать с проверки его статуса в списке — активен ли он вообще и не был ли деактивирован из-за пропущенного возврата строки самовызова или необработанного исключения. Если агент активен, но не срабатывает вовремя — вероятная причина в отсутствии системного cron, из-за чего запуск полностью зависит от случайности реальных визитов на сайт.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    База знаний