1. Где разместить функцию агента
Функцию, которую будет выполнять агент, можно разместить двумя способами:- В своём модуле. Файл
/bitrix/modules/[ID_МОДУЛЯ]/include.php— правильный вариант для production. - В
init.php. Файл/bitrix/php_interface/init.php— для быстрых решений, без модуля.
2. Пример функции агента
<?php
// Файл /bitrix/php_interface/init.php
function myTenMinuteAgent() {
// Ваш код, который нужно выполнять раз в 10 минут
// Например, запись в лог:
AddMessage2Log('Агент выполнен: ' . date('Y-m-d H:i:s'), 'my_module');
// Обязательно вернуть имя функции для повторного запуска
return "myTenMinuteAgent();";
}
?>
Важно: Функция должна возвращать строку с именем функции для следующего запуска. Если вернуть пустую строку "" — агент остановится и больше не будет запускаться.
3. Регистрация агента через CAgent::AddAgent()
Используйте метод AddAgent класса CAgent (модуль main, файл /bitrix/modules/main/classes/general/agent.php).
Чтобы агент запускался каждые 10 минут (600 секунд), зарегистрируйте его так:
<?php
CAgent::AddAgent(
"myTenMinuteAgent();", // (string) Имя функции для вызова
"", // (string) ID модуля (пусто, если функция в init.php)
"Y", // (string) "Y" — периодический, "N" — однократный
600, // (int) Интервал в секундах (600 = 10 минут)
"", // (string) Дата первой проверки. Пусто — текущая дата
"Y", // (string) "Y" — активен, "N" — неактивен
"", // (string) Дата первого запуска. Пусто — сразу
100 // (int) Сортировка (чем меньше, тем выше приоритет)
);
?>
Или с указанием модуля:
<?php
CAgent::AddAgent(
"MyModule\\Agent::myTenMinuteAgent();", // статический метод класса
"my_module", // ID модуля
"Y",
600,
"",
"Y",
"",
100
);
?>
4. Где выполнить код регистрации
Есть несколько вариантов:
- Через админку: Настройки → Настройки продукта → Агенты → нажать Добавить агента и заполнить поля.
- Через командную PHP-строку: Настройки → Инструменты → Командная PHP-строка — выполнить код с
CAgent::AddAgent(...)один раз. - В установочном файле модуля: В методе
InstallDB()класса, наследующегоBitrix\Main\Module.
5. Важный момент — cron (рекомендуется)
По умолчанию агенты запускаются на хитах (при заходе посетителя). Для точного соблюдения интервала в 10 минут лучше настроить запуск через cron:
- Включите частичный перевод агентов на cron:
COption::SetOptionString("main", "agents_use_crontab", "Y");
- Добавьте задание в crontab на сервере:
*/10 * * * * bitrix /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
Путь /home/bitrix/www замените на ваш DOCUMENT_ROOT.
6. Полный пример (код для вставки в админку)
Выполните этот код один раз через Командную PHP-строку в админке:
<?php
// Сначала убедитесь, что функция существует
function myTenMinuteAgent() {
// Здесь ваша логика
\Bitrix\Main\Diag\Debug::writeToFile(
date('Y-m-d H:i:s'),
"Агент сработал",
"__agent_log.txt"
);
return "myTenMinuteAgent();";
}
// Регистрируем агент — каждые 10 минут
CAgent::AddAgent(
"myTenMinuteAgent();",
"",
"Y",
600,
"",
"Y",
"",
100
);
echo "Агент успешно создан!";
?>
Проверка работы агента
Проверить список агентов можно в админке: Настройки → Настройки продукта → Агенты. Найдите ваш агент в таблице, проверьте колонки Следующий запуск и Последний запуск.