Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Агенты



Агенты — это функционал Bitrix, с помощью которого можно запускать функции PHP с заданным промежутком времени.
Примеры агентов:
  • раз в сутки обновлять цены товаров в эквайринге
  • раз в неделю отправлять статистику администратору
  • раз в 3 дня отменять неоплаченные заказы
То есть если нам нужна какая-то периодичность выполнения, то это агент



/bitrix/admin/agent_list.php?lang=ru - список агентов

изначально в системе агенты Битрикс, можно добавить и свои







Список полей агента - документация битрикс


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

Агенты на хитах. Есть два агента с периодом 1 минута периодический и нет.
На сайт никто не заходил 10 минут: периодический агент отработает 10 раз, а непериодический - только один.

Удаляем 1 файл кеша раз в 10 секунд. Надо чтобы через минуту было удалено 6 файлов, тогда создается периодический агент.
Если же он удаляет весь старый кеш разом, то должен быть непериодический.

Если агент добавлен в систему и не запускается,
  • проверить дату (в агенте указывать время сервера)
  • во вкладе автокешироование Очистить Весь управляемый кеш
Изначально при установке Битрикса агенты выполняются на хитах пользователей (будет у некоторых долго страница загружаться).
Надо их переносить выполнение агентов на крон.
Сron – программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени.

Перенос агентов на cron - инструкция


Свои агенты:
  • в init.php (функциями или как класс и метод) - тогда модуль указываем "main"
  • в своих модулях   - указываем свой модуль
Если агент в классе
  • функция агента будет \nikaverro\dev\sell\agents\TwoCheckoutAgents::syncProductsAgent(); - полное имя
  • и в retutn надо полное имя \nikaverro\dev\sell\agents\TwoCheckoutAgents::syncProductsAgent();

Задача:
раз в сутки получить список всех лицензий с удаленного сервера лицензий с определенной версией и из них выбрать истекшие (фильтром никак, нет апи, только перебром)
и с ними провести действие
За 1 раз не получится получить список всех лицензий, потому что их много. Надо постранично обходить.
Поэтому сделан агент GetExpiredLicencesMainAgent, который запускается раз в сутки, и он уже создает другого агента GetExpiredLicences, которые обходят постранично раз в 30 сек

GetExpiredLicences();  вернет GetExpiredLicences(1);
GetExpiredLicences(1); вернет GetExpiredLicences(2);
//
GetExpiredLicences($lastPage); вернет пустую строку и агент второй из системы пропадет


в поле Функция агента указано "GetExpiredLicencesMainAgent();"
function GetExpiredLicencesMainAgent(){
    $date = new DateTime();
    $date->modify("+3 hour 10  minutes");
    CAgent::AddAgent(
        "GetExpiredLicences();",
        "main",
        "Y",
        20,
        $date->format("d.m.Y H:i:s"),
        "Y",
        $date->format("d.m.Y H:i:s")
    );

    return "GetExpiredLicencesMainAgent();";
}
function GetExpiredLicences($pageNumber = 0){
       //моя логика 


      return ($pageNumber <= $totalPages) ? "GetExpiredLicences(" . $pageNumber . ");" : "";}
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!