Граждане, товарищи, а объясните про крон/cron на пальцах.

Вообщем задача тривиальная, есть контролер parsing в нем есть экшен parsingurls.

Если запускать через браузер в экшен передается через пост 2 параметра $_POST[‘object_count’] и $_POST[‘type_offer’].

Начал читать вот это http://yiiframework.ru/doc/cookbook/ru/install.cron

И вот тут засада:




class TestCommand extends CConsoleCommand {

    public function run($args) {

        // тут делаем то, что нам нужно

    }

}



ВОПРОС 1 - фраза:

// тут делаем то, что нам нужно означает что я должен продублировать код экшена в консольный класс?

т.е. я должен взять свой public function actionParsingUrls() {} тупо переименовать его в public function run (){} и на этом все? Или я не так все понял?

ВОПРОС 2 - фраза:


// файл конфигурации будет отдельный

$configFile='path/to/config/cron.php';

А это обязательно?

И если да, то почему?

Почему я не могу использовать main.php если настройки идентичны?

Или это делается только в том случае если нужен другой конфиг для крона?

Зарание благодарен за помощь.

  1. Да, нужно поместить код экшена в метод run(), заменив значения из $_POST на соответствующие значения $args.

  2. Конфиг может быть любой. В статье лишь показано, что, как правило, он отличается от основного, и не за чем, к примеру, помещать в него правила url или подключение каких-либо расширений. Конфиг для cron’а обычно гораздо проще, чем main.

За ответ спасибо, но опять вопрос. А зачем в $args передавать значение если я могу просто это прописать сразу в коде? Или тут опять какой то скрытый смысл?

Вот кусок экшена который был:




public function actionParsingUrls() {

        ignore_user_abort(true);

        set_time_limit(0);

        $errors = array();

        $pars_page = '';

        $i_p = 0;

        if (isset($_POST['parsingurls'])) {

            $limit_url = $_POST['object_count'];

            $type_offer = $_POST['type_offer'];

            $urls = Parsing::model()->getParsingUrls($type_offer,$limit_url);

            $areases = Areas::model()->getListAreases();

            Yii::import('application.vendors.*');


            // продолжение кода ...



А вот так как я понял надо делать в классе крона:




class ParsingUrls extends CConsoleCommand {

    public function run() {

            $limit_url = 5;

            $type_offer = 1;

            $urls = Parsing::model()->getParsingUrls($type_offer,$limit_url);

            $areases = Areas::model()->getListAreases();

            Yii::import('application.vendors.*');


            // продолжение кода ...

}

        



Так верно?

Нет никакого скрытого смысла. Можете писать в коде, можете читать из файла, можете выполнять код для всех значений $type_offer от 1 до 1000. Передача параметров из командной строки - лишь один из вариантов.