Правильный способ регистрации агента внутри собственного модуля:
Агент добавляется в методе 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(...);
} |