Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья6 мин чтенияПросмотры9

Агенты 1С-Битрикс выполняются с опозданием: где искать очередь

Время следующего запуска наступило, но результат появился позже. Разбираем отдельно три участка: кто вызывает проверку агентов, когда агент получает очередь и сколько занимает его собственная работа.

Комментарии 0

Альбина изучает очередь фоновых задач и выделенный элемент на временной шкале.
В этой статье

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

Чтобы не чинить расписание наугад, я разделяю задержку на три участка: вызов проверки агентов, выбор задачи, срок которой наступил, и работа самой функции. Для каждого участка нужны свои отметки времени. Иначе две разные проблемы выглядят одинаково: «агент опоздал».

Время следующего запуска — не обещание точной секунды

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

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

Перенос на cron убирает зависимость от трафика, но не превращает расписание в отдельного исполнителя для каждого агента. Один вызов всё равно должен получить список задач и выполнить работу в доступном процессе.

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

Периодический и непериодический агент считают следующую дату по-разному

Для периодического агента следующая дата привязана к предыдущему запланированному запуску и интервалу. Для непериодического — к моменту успешного завершения и интервалу. Эта разница важна при расследовании: длительная работа может по-разному выглядеть в истории и влиять на момент следующего выполнения.

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

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

Сначала докажите, что вызывается проверка

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

  • Есть ли регулярные старты процесса в ожидаемом часовом поясе.
  • Доходит ли процесс до проверки агентов, а не завершается раньше.
  • Одинаковы ли окружение, пользователь и доступ к нужной конфигурации.
  • Не выполняется ли одновременно другой механизм, который меняет картину.

В статье я намеренно не даю универсальную строку cron. Путь к проекту, версия окружения, способ развёртывания и настройки агентов различаются. Копируемая команда без этих условий чаще добавляет второй запуск, чем объясняет первый.

Затем отделите очередь от самой функции

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

Схема диагностики разделяет запуск cron, проверку агентов, ожидание конкретной задачи и её бизнес-результат.
Четыре отметки времени позволяют отличить сбой вызова от очереди и долгой работы самого агента.

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

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

Не путайте старт агента с бизнес-результатом

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

Обратная ситуация тоже встречается: бизнес-результат создан, но интерфейс показывает старое состояние из кэша. Если проверять только экран, задержка выполнения смешивается с задержкой отображения. Сначала ищут событие в источнике результата, затем путь до интерфейса.

Четыре отметки времени дают рабочий диагноз

  • T1 — момент, когда агент стал доступен для запуска.
  • T2 — фактический вызов механизма проверки агентов.
  • T3 — начало функции конкретного агента.
  • T4 — подтверждённый бизнес-результат или передача в следующую очередь.

Разница T2 − T1 показывает задержку вызова. T3 − T2 — ожидание внутри механизма выполнения. T4 − T3 — длительность функции и следующих синхронных шагов. Если после агента есть отдельная очередь, добавляют ещё одну отметку результата её потребителя. Это учебная модель, но она заставляет формулировать проблему точнее, чем «cron тормозит».

Измерять лучше несколько последовательных запусков, включая обычную и повышенную нагрузку. Один удачный запуск не исключает очередь, а один неудачный может совпасть с обслуживанием внешнего сервиса. При этом наблюдение не должно само создавать тяжёлые запросы или раскрывать содержимое заказов.

Когда менять расписание, а когда — функцию

Расписание меняют, если доказано, что проверка вызывается реже требуемого или запускается не тем окружением. Очередь разбирают, если вызов регулярный, но T3 заметно отстаёт от T2. Функцию оптимизируют или делят на порции, если основное время уходит между T3 и результатом.

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

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

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.