1 Отредактировано Евгений (02.04.2018 16:24:46)

Тема: cron

Доброго времени суток!!!

Понадобилось по cron-у запускать некоторую задачу, посмотрел как реализовано в антивирусе, создал модель /modulename/model/custommodel.inc.php:

namespace ModuleName\Model;

class CustomModel extends BaseModel {

    static private $instance;

    static public function getInstance()
    {
        if(self::$instance === null)
        {
            self::$instance = new self;
        }

        return self::$instance;
    }

    public function verify() 
    {
    // тут мой код
    }
}

в файле /modulename/config/handlers.inc.php прописал:

namespace ModuleName\Config;
use RS\Orm\Type as OrmType;
use ModuleName\Model\CustomModel;

class Handlers extends \RS\Event\HandlerAbstract
{

    function init()
    {
        $this
            ->bind('getroute')  //событие сбора маршрутов модулей
            ->bind('cron');
    }

    public static function cron($params)
    {
        foreach($params["minutes"] as $minute) {
            if (($minute % 10) == 0) {
                CustomModel::getInstance()->verify(); //запускаем функцию нашей модели
            }
        }
    }
}

но почему то модель не отрабатывает, что я мог прописать не так?

и еще вопрос, в корне сайта лежит файл _local_settings.php, с содержанием:

<?php
\Setup::$DETAILED_EXCEPTION = true;

но нигде не вижу лог-файл, где его искать?

Повысить оценку Понизить оценку

Re: cron

Пообщались с тех.поддержкой хостинга, крон теперь запускает задачу раз в минуту, и постоянно приходят письма:

Cron locked

а раз в час крон срабатывает и ничего не приходит, и модель не отрабатывает
все настроено по инструкции https://readyscript.ru/manual/cron.html

не пойму куда копать...

Повысить оценку Понизить оценку

Re: cron

"Разблокировать Cron" - не срабатывает - "Ошибка удаления"

Повысить оценку Понизить оценку

Re: cron

Возможно, нет прав на удаление файла /storage/locks/cron. Если файл существует, то крон будет заблокирован.
\Setup::$DETAILED_EXCEPTION = true; - Не относится к логированию, а при произошедшем исключении показывает код ошибки, вместо оформленной страницы (404 например).

Повысить оценку Понизить оценку

Re: cron

Обычно cron не разблокируется, когда настроен не под пользователем, под которым работает PHP сайта. Соответственно у PHP нет прав на удаление.
Я сам сначала по ошибке из под рута его ставил.
Особенно легко в ispmanager перепутать.

6

Re: cron

Как отлаживать cron:

1. Рекомендую включить запись исключений в файл, создав в корне файл _local_settings.php с содержимым:

<?php
\Setup::$WRITE_EXCEPTIONS_TO_FILE = true; //в таком случае все исключения будут записаны в файл /exceptions.auto.txt в корне сайта.

Далее нужно проанализировать, не происходит ли исключений во время выполнения заданий. Даннный файл при нормальных настройках должен содержать максимум исключения PageNotFound - (это 404 страницы)

2. Нужно смотреть error.log apache, на предмет наличия fatal error от PHP. Если они там есть, нужно смотреть какие.

3. Вы можете попробовать для отладки запустить ваш cron файл через браузер ваш_сайт/core/cron/cron.php и посмотреть, непосредственно как выполняется планировщик.

Повысить оценку +1 Понизить оценку

7 Отредактировано Ярослав (08.05.2018 23:38:54)

Re: cron

Записал себе в блокнот и пошел изучать описание класса abstractsetup.
Поседел, пока отладил дополнение к триггерным рассылкам)