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')]);

В пример запуск будет выполнен через час.