Что такое CRON в Битрикс?

В Битрикс CRON нужен для:
  • Очистки кеша

  • Отправки писем из очереди

  • Резервного копирования

  • Синхронизации с 1С

  • И других фоновых задач

Как работает CRON в Битрикс?

Битрикс использует агентов — это специальные PHP-функции или методы, которые выполняются по расписанию.

1. Где настраивается CRON в Битрикс?

Есть два варианта:

  • Через админку: Настройки → Инструменты → Агенты

  • Через файлы PHP/bitrix/php_interface/init.php или модулях)

2. Как добавить агента?

Вариант 1. Через админку

  1. Заходим в Настройки → Инструменты → Агенты

  2. Жмём "Добавить агента"

  3. Заполняем:

    • Модуль (если агент относится к модулю, например main)

    • Функция агента (например, MyCustomFunction)

    • Период выполнения (например, 86400 — раз в сутки)

    • Дата первого запуска

    • Активность (галочка)

Вариант 2. Через код (init.php)

<?php
// Регистрируем агента
\CAgent::AddAgent(
    "MyCustomFunction();",  // Что выполнять
    "",                     // Модуль (пусто — main)
    "N",                    // Является ли периодическим? (Y/N)
    86400,                  // Интервал (секунды)
    "",                     // Дата первой проверки (пусто — сейчас)
    "Y",                    // Активность
    ""                      // Дата следующего запуска (если нужно)
);
?>

3. Как выглядит функция агента?

Функция должна возвращать строку с именем себя, иначе агент удалится после выполнения.

function MyCustomFunction() {
    // Тут делаем что-то полезное, например, чистим кеш
    \Bitrix\Main\Data\Cache::createInstance()->cleanDir();
    
    // Возвращаем имя функции, чтобы агент не удалился
    return "MyCustomFunction();";
}

4. Как настроить CRON на сервере?

Чтобы агенты работали, нужно добавить задачу в системный CRON (через cPanel, хостинг или SSH).

Команда для CRON (обычно раз в минуту):

* * * * * php /var/www/site/bitrix/modules/main/tools/cron_events.php

(Путь /var/www/site/ замени на свой путь к сайту.)

5. Полезные команды для агентов

  • Проверить список агентов (в админке или через \CAgent::GetList())

  • Запустить агента вручную (в админке кнопка "Выполнить")

  • Удалить агента (\CAgent::Delete("MyCustomFunction();"))

Примеры популярных агентов

  1. Очистка кеша раз в день

function ClearCacheAgent() {
    \Bitrix\Main\Data\Cache::createInstance()->cleanDir();
    return "ClearCacheAgent();";
}
  1. Отправка писем из очереди каждые 5 минут

function SendEmailsAgent() {
    \CEvent::CheckEvents();
    return "SendEmailsAgent();";
}

(В CRON ставим интервал 300.)


1. Периодические агенты

Как работают?

  • Выполняются автоматически через заданный интервал времени (например, раз в час, раз в сутки).

  • После выполнения не удаляются, а ждут следующего запуска.

  • Пример: Очистка кеша, отправка писем, синхронизация с 1С.

Как создать?

В коде указываем:

\CAgent::AddAgent(
    "MyPeriodicFunction();",  // Функция
    "",                      // Модуль (если не нужен)
    "Y",                     // Периодический? (Y - да)
    3600,                    // Интервал (в секундах, 3600 = 1 час)
    "",                      // Дата первого запуска (пусто = сейчас)
    "Y",                     // Активен? (Y - да)
    ""                       // Дата следующего запуска (если не указано, расчитается автоматически)
);

Пример

function CleanCacheEveryHour() {
    \Bitrix\Main\Data\Cache::cleanAll(); // Чистим кеш
    return "CleanCacheEveryHour();";     // Возвращаем имя, чтобы агент не удалился
}

Что будет?
→ Раз в час Битрикс будет вызывать CleanCacheEveryHour().

2. Непериодические агенты

Как работают?

  • Запускаются только один раз (или вручную).

  • После выполнения удаляются из списка агентов (если не вернуть имя функции).

  • Пример: Разовые задачи (отправка уведомления, импорт данных, миграция).

Как создать?

\CAgent::AddAgent(
    "MyOneTimeFunction();",  // Функция
    "",                      // Модуль
    "N",                     // Периодический? (N - нет)
    0,                       // Интервал (не важен, т.к. агент непериодический)
    "25.04.2025 15:00:00",   // Дата и время запуска (если пусто — сразу)
    "Y",                     // Активен?
    ""                       // Дата следующего запуска (не нужно)
);

Пример

function SendBirthdayEmail() {
    \CEvent::Send("BIRTHDAY_REMINDER", "s1", ["EMAIL" => "user@example.com"]);
    // Не возвращаем имя, чтобы агент удалился после выполнения
}

Что будет?
→ Агент выполнится один раз в указанное время (25.04.2025 15:00) и исчезнет из списка.


Главные отличия

КритерийПериодический агентНепериодический агент
Повторный запускДа (по расписанию)Нет (только один раз)
Удаляется после выполнения?Нет (если вернул имя функции)Да (если не вернул имя)
Где используется?Фоновые задачи (кеш, почта, 1С)Разовые действия (миграция, уведомления)
Параметр is_periodYN

Когда что использовать?

Периодические – если задача должна выполняться регулярно (например, каждые 5 минут, раз в день).
Непериодические – если задача одноразовая (например, отправить письмо в конкретную дату).


Важно!

  • Если непериодический агент вернёт своё имя (return "MyFunction();"), он не удалится и станет вечным (как периодический, но без интервала).

  • Если периодический агент не вернёт имя, он удалится после первого выполнения.


bitrixone © 2025