Как в битрикс создать агента чтобы он раз в 10 минут запускал скрипт?

Вопрос задан: 24 мая 2026 в 03:05 | Задайте свой вопрос

Использованные MCP инструменты: searchDocs, liveApiFindFunction, liveApiGetClassMethods, liveApiGetClassCode, liveApiGetFunctionCode
Просмотров: 1

Вот подробная инструкция по созданию агента, который будет запускаться каждые 10 минут.

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:

  1. Включите частичный перевод агентов на cron:
COption::SetOptionString("main", "agents_use_crontab", "Y");
  1. Добавьте задание в 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 "Агент успешно создан!";
?>

Проверка работы агента

Проверить список агентов можно в админке: Настройки → Настройки продукта → Агенты. Найдите ваш агент в таблице, проверьте колонки Следующий запуск и Последний запуск.