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 запрос запускающий весь стек фоновых задач.