Агенты — это функционал Bitrix, с помощью которого можно запускать функции PHP с заданным промежутком времени. |
Примеры агентов:
|
/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();
Задача: раз в сутки получить список всех лицензий с удаленного сервера лицензий с определенной версией и из них выбрать истекшие (фильтром никак, нет апи, только перебром) и с ними провести действие |
Поэтому сделан агент 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 . ");" : "";} } |