Довольно-то таки простая функция которая выполняет перенос в другой раздел и изменяет одно свойство, по истечении определенного времени. Отлично работает при вставке на лист.
Дата последнего запуска:
*Дата и время следующего запуска (DD.MM.YYYY HH:MI:SS): 04.10.2011 15:10:00
Активен: Да
Модуль:
*Функция агента: AutoAuctsCmpl(4);
ID пользователя:
Сортировка: 100
Периодический: Да
Интервал (сек.): 60
Она не выполняется.
Функция размещена в /bitrix/php_interface/init.php и по идеи должны быть доступна всегда, однако такое ощущение, что агент ее просто не видит.
Хм... А зачем? Функция у меня в /bitrix/php_interface/init.php, он по идеи подключается по любому. Сказать, что не доступна какая-то функция используемая в ней, тоже нельзя, потому, что даже в таком виде:
Код
function AutoAuctsCmpl($extm = 4)
{
return "AutoAuctsCmpl(".$extm.");";
}
агент ее не запускает.
Да и страница на которой я тестирую ее выполнения выглядит так:
Ах вот как? Агент запускается в другом окружении? Значит добавление CModule::IncludeModule('iblock') в функцию или просто указание моделя iblock в параметре агента Модуль, должно решить проблему?
Но однако же и функция
Код
function AutoAuctsCmpl($extm = 4)
{
return "AutoAuctsCmpl(".$extm.");";
}
не выполняется, хотя в ней вообще не используется функционал модулей.
Были конечно. Я новичек, но не настолько. К тому же там есть еще с 10 других агентов - они исправно работают. Что интересно все они подключены из разных модулей, и никто из init.php. Может создатели ресурса внесли какие-то изменения которые я не замечаю? Куда посмотреть?
Как-то натыкался на глюк, что если агент плохо отработал, то он начинает косячить, попробуйте его удалять и добавлять заново. Время должно обновляться, да. Или это не глюк, а защита от сумасшедших агентов.
2 Антон Долганин О да. Это оно! Осталось разобраться где ошибка в функции. Точнее где она в этой строке: $res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
Реализовал без агента - стат сайта позволяет. Но на выходных попробую разобраться. Все-таки осадочек остался. Права проверю, но ведь у агентов права системы. Нет?
Какой-то это бессмысленный пост будет... Дело в том, что я таки разобрался. Но сразу описать не было сил. А теперь - не помню в чем была проблема. В любом случае это было как-то связано с обработчиком события который я не сразу обнаружил. Может хоть в таком виде кому-то поможет...
Если функция-агент принадлежит модулю, то перед ее выполнением, этот модуль будет автоматически подключаться, а именно будет подключаться файл /bitrix/modules/ID модуля/include.php, в этом случае необходимо убедиться, что функция-агент будет доступна после подключения этого файла. Если функция-агент не принадлежит ни одному из модулей, то ее необходимо разместить в файле /bitrix/php_interface/init.php. Данный файл автоматически подключается в прологе.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Дабы не плодить новых тем, задам свой вопрос в этой, тем более отметились здесь гуру скрипта. Есть какие-либо эффективные способы отладки выполнения функций агентов? Поясню. Аналогично автору темы пытался выяснить причину сбоя агента (единственным внешним признаком было отсутствие обновления времени следующего запуска). Удалось-таки выловить ошибку - лишний параметр в CIBlockSection::Update, однако никаких сообщений об ошибке не было. Отсюда и вопрос.
У меня локально агент отработал раз 10 и внезапно перестал. Время запуска давно прошло, интервал 10 сек. Как обычно, пришлось лезть в кишки битрекса -__- Агенты для запуска выбираются в месте bitrix/modules/main/classes/mysql/agent.php:121
Код
$agents_array[] = $db_result_agents_array;
смотрим этот массив и попал ли наш агент в него
Код
print_r($agents_array); die;
Если нет - то находим наш агент в таблице `b_agent` и удаляем у него `DATE_CHECK`
Так же если не запускаются агенты, то может нужно удалить из /bitrix/php_interface/dbconn.php установку константы
Код
define('BX_CRONTAB_SUPPORT', true);
Если всё равно не запускаются - изменить в таблице `b_option` у записи с NAME `check_agents` на `Y`.
Изначально проверить пытаются ли вообще запуститься можно в файле bitrix/modules/main/include.php:259
Всё это относится к агентам, отрабатываемым по хитам. Может быть по крону тоже, не проверял. У меня вышло так - на сервере они работают на кроне, настраивал не я, а локально не хочу заморачиваться с кроном, решил сделать на хитах, и вот пришлось решать почему не работают... Про `check_agents` спасибо https://pai-bx.com/wiki/1c-bitrix/2327-return-agents-on-hits/
До этого бывало сталкивался пару раз с тем, что агент переставал работать. Я начинал копаться почему, но потом он внезапно начинал работать и я успокаивался. Видимо это было связано именно с `DATE_CHECK`, ибо в этот раз она почему-то стояла где-то на полчаса больше -___- Почему-то так сильно много ибо в коде она сама иногда выставляется на 10 мин.
Код
$strSql = "UPD ATE b_agent SE T DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND)
Выяснилось что `DATE_CHECK` остаётся если произошла какая-то ошибка! Приходится вручную удалять её -___-
Для удобства, для меня проще был узнать отрабатывает агент или нет - создавать файл в той же директории что и сам скрипт запуска агента, сделал так:
Код
$sdir = dirname(__FILE__);
file_put_contents($sdir .'/'. date('H.i.s'). '.txt', ''); # название файла содержит час, минуту и секунду сработанного агента