В Битриксе отсутствует функция обновления агента по имени функции.
Точнее, если верить комментариям на странице метод CAgent::Update($ID, $arFields) есть, но он требует знания ID агента, который сначала нужно получить.
Есть обходной вариант, который можно увидеть в справке по CAgent::RemoveAgent():
Недостаток этого метода - он удаляет текущее состояние агента. Что может быть важно для агентов, у которых периодичность выполнения: через заданный интервал: при сбросе следующей даты запуска на текущую, агент запустится немедленно, что может быть нежелательно.
Также можно воспользоваться модулем sprint.migration
Код будет выглядеть примерно так:
Недостаток - зависимость от стороннего модуля
Точнее, если верить комментариям на странице метод CAgent::Update($ID, $arFields) есть, но он требует знания ID агента, который сначала нужно получить.
Есть обходной вариант, который можно увидеть в справке по CAgent::RemoveAgent():
CAgent::RemoveAgent("CCatalog::PreGenerateXML(\"yandex\");", "catalog");
if ($bNeedAgent)
{
CAgent::AddAgent("CCatalog::PreGenerateXML(\"yandex\");", "catalog", "N", 24*60*60, "", "Y");
}
|
Также можно воспользоваться модулем sprint.migration
Код будет выглядеть примерно так:
use Sprint\Migration\Version;
\CModule::IncludeModule("sprint.migration");
$helper = (new Version())->getHelperManager();
$helper->Agent()->saveAgent(array(
'MODULE_ID' => 'my_module',
'USER_ID' => NULL,
'SORT' => '0',
'NAME' => 'myAgent();',
'ACTIVE' => 'Y',
'NEXT_EXEC' => date('d.m.Y H:i:s'),
'AGENT_INTERVAL' => 60*60,
'IS_PERIOD' => 'N',
'RETRY_COUNT' => '0',
));
|
Недостаток - зависимость от стороннего модуля