-
Очистки кеша
-
Отправки писем из очереди
-
Резервного копирования
-
Синхронизации с 1С
-
И других фоновых задач
Как работает CRON в Битрикс?
Битрикс использует агентов — это специальные PHP-функции или методы, которые выполняются по расписанию.
1. Где настраивается CRON в Битрикс?
Есть два варианта:
Через админку: Настройки → Инструменты → Агенты
Через файлы PHP (в
/bitrix/php_interface/init.php
или модулях)
2. Как добавить агента?
Вариант 1. Через админку
Заходим в Настройки → Инструменты → Агенты
Жмём "Добавить агента"
Заполняем:
Модуль (если агент относится к модулю, например
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();")
)
Примеры популярных агентов
Очистка кеша раз в день
function ClearCacheAgent() { \Bitrix\Main\Data\Cache::createInstance()->cleanDir(); return "ClearCacheAgent();"; }
Отправка писем из очереди каждые 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_period | Y | N |
Когда что использовать?
Периодические – если задача должна выполняться регулярно (например, каждые 5 минут, раз в день).
Непериодические – если задача одноразовая (например, отправить письмо в конкретную дату).
Важно!
Если непериодический агент вернёт своё имя (
return "MyFunction();"
), он не удалится и станет вечным (как периодический, но без интервала).Если периодический агент не вернёт имя, он удалится после первого выполнения.