Как создать агента в своем модуле 1С-Битрикс

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
В 1С-Битрикс агент — это PHP-функция, выполняемая по расписанию. По сути, это запись в таблице b_agent, которую ядро вызывает либо при хитах, либо через cron.
Правильный способ регистрации агента внутри собственного модуля:

Агент добавляется в методе DoInstall()
Удаляется — в DoUninstall()
Код
/local/modules/vendor.module/install/index.php

Регистрация агента
Код
use Bitrix\Main\ModuleManager;

class vendor_module extends CModule
{
    public function DoInstall()
    {
        ModuleManager::registerModule($this->MODULE_ID);
        $this->installAgents();
    }

    public function DoUninstall()
    {
        $this->unInstallAgents();
        ModuleManager::unRegisterModule($this->MODULE_ID);
    }

    protected function installAgents()
    {
        \CAgent::AddAgent(
            "\\Vendor\\Module\\Agent::run();", // что вызываем
            $this->MODULE_ID,                  // модуль
            "N",                               // не привязан к хитам
            300,                               // интервал (сек)
            "",
            "Y",
            "",
            100
        );
    }

    protected function unInstallAgents()
    {
        \CAgent::RemoveAgent(
            "\\Vendor\\Module\\Agent::run();",
            $this->MODULE_ID
        );
    }
}

Сам агент в /local/modules/vendor.module/lib/Agent.php:
Код
namespace Vendor\Module;

class Agent
{
    public static function run()
    {
        // логика

        return "\\Vendor\\Module\\Agent::run();";
    }
}

Агент обязан вернуть строку вызова
Если вернуть false или пустую строку — агент удалится.

Указывайте полный namespace
Битрикс хранит строку буквально.
Нельзя писать:
Код
Agent::run();

Нужно:
Код
\\Vendor\\Module\\Agent::run();
3. Проверяйте, что агент не добавляется дважды
$res = \CAgent::GetList([], [
    "NAME" => "\\Vendor\\Module\\Agent::run();",
    "MODULE_ID" => $this->MODULE_ID
]);

if (!$res->Fetch()) {
    \CAgent::AddAgent(...);
}
Не используйте агенты если:
- задача выполняется >20–30 секунд
- требуется высокая точность по времени
- возможны параллельные запуски
- большой объём данных

В этих случаях лучше:
- cron + CLI-скрипт
- очередь (RabbitMQ, Redis)
- отдельный worker
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 350 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 5-ти недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 300 000 руб. от 2-х недель

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

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.