Cron-менеджер
Менеджер cron-задач отвечает за фоновые процессы приложения и выполняется каждую минуту посредством crontab.
Все выполняемые задачи фиксируются в лог-файле /files/logs/cron.log
Модули
Для того чтобы указать на необходимость запуска фоновой задачи модулю необходимо объявить следующий метод:
public function cronSettings()
{
return array(
'cronTask1' => array('period' => '*/15 * * * *'),
'cronTask2' => array('period' => '0 * * * *'),
);
}
В примере был описан запуск двух задач, метод cronTask1 будет запускаться каждые 15 минут, а метод cronTask2 раз в час в 0 минут.
В контроллере модуля при этом должны быть объявлены методы с указанным названием и иметь следующий вид:
public function cronTask1()
{
if ( ! bff::cron()) {
// Проверка контекста выполнения
// Таким образом данный метод будет достен только в контексте запуска cron-менеджером
return;
}
// Выполняемый код
}
Метод должен быть публичным и содержать проверку контекста выполнения. Объявляться он должен в базовом или же frontend-контроллере.
В случае если необходимо единожды запустить фоновую задачу это можно сделать следующим образом:
bff::cronManager()->executeOnce('module', 'method', ['param'=>1]);
Где указывается название модуля и метода, также доступна возможность указать параметры передаваемые в функцию. Вызов метода будет выполнен в течение ближайшей минуты, при ближайшем запуске cron-менеджера.
Дополнения
Плагины и темы также могут объявить метод cronSettings
в файле index.php при необходимости, содержание метода идентично описанию выше.
Единоразовый запуск задачи в контексте дополнения выглядит следующим образом:
$this->cronExecuteOnce('method', ['param'=>1]);
Также есть возможность указать время запуска:
$this->cronExecuteOnce('method', ['param'=>1], ['time'=>strtotime('+1 hour')]);
В пример запуск будет выполнен через час.