Cron (Планировщик задач)¶
Фоновые задачи в oxwall занимают одно из основных мест в приложении, так как приложение работает с большими массивами данных (профили пользователей, фотографии, форумы, итд) то зачастую приходится обрабатывать эти данные порционно. При установке приложения одно из требований это - настройка планировщика задач (Cron) на запуск файла “ow_cron/run.php” каждую минуту.
У вас может возникнуть вопрос - “Зачем мне запускать мою задачу каждую минуту если мне хватит и одного запуска один раз в час”, это верно, но данный подход избавляет разработчиков от необходимости в ручную прописывать каждую свою задачу в cron и тем самым облегчает работу администраторам сайта. Задать время выполнения своей задачи вы сможете позже, самостоятельно в файле cron.php.
Инициализация планировщика задач¶
Для инициализации файла cron, разработчику достаточно создать файл cron.php в корне своего плагина (подробнее про структуру плагина можно прочитать в разделе - Структура плагина) и реализовать необходимую логику внутри него, пример такого файла:
<?php
class MYSUPERPLUGIN_Cron extends OW_Cron
{
/**
* Run command every minute
*
* @return void
*/
public function run()
{
// do my own logic
}
}
Как видно на примере в методе run будет выполняться некоторая логика каждую минуту (это время по умолчанию). Если необходимо использовать другие промежутки времени, их можно зарегистрировать в конструкторе класса или переопределить метод getRunInterval который изменит время выполнения метода run:
<?php
class MYSUPERPLUGIN_Cron extends OW_Cron
{
/**
* Class constructor
*/
public function __construct()
{
parent::__construct();
$this->addJob('doSomething', 5);
}
/**
* Do something every 5 minutes
*
* @return void
*/
public function doSomething()
{
// do my own logic
}
/**
* Return run interval in minutes
*
* @return int
*/
public function getRunInterval()
{
return 10; // minutes
}
/**
* Run command every 10 minutes
*
* @return void
*/
public function run()
{
// do my another own logic
}
}
Стоит отметить тот факт, что даже если администратор сайта не настроил cron, то выполнение фоновых задач все равно будет продолжаться. Это реализовано с помощью клиентских запросов, т.е когда клиент запрашивает страницу, на сервер посылается ajax запрос запускающий весь стек фоновых задач.