Magento: настройка cronjob каждые 2 часа - PullRequest
2 голосов
/ 09 сентября 2011

По какой-то причине этот код в файле config.xml модуля:

<jobs>
    <stockupdate>
       <schedule><cron_expr>0 */2 * * *</cron_expr></schedule>
        <run><model>stockupdate/cron::start</model></run>
    </stockupdate>
</jobs>

не работает.Хотя после изменения */2 на * все вроде бы нормально.

Чтобы проверить это, сначала я делаю TRUNCATE cron_schedule, затем очищаю кэш rm -rf var/cache, затем запускаю php cron.php, а затем SELECT * FROM cron_scheduleчтобы увидеть, было ли запланировано задание.

Я знаю, что есть и неприятный способ 0 0,2,4,6,8,10,12,14,16,18,20,22 0 0 0, но это очень не элегантное решение.

Так как я могу сказать Magento запускать эту задачу каждые 2ч

Ответы [ 3 ]

1 голос
/ 03 июля 2012

для каждых 2 часов используйте выражение

<schedule><cron_expr>0 */2 * * *</cron_expr></schedule>

, если вы установите

<schedule><cron_expr>* */2 * * *</cron_expr></schedule>

, вы получите, что задача будет планироваться каждую минуту каждый второй час.60 заданий за второй час, 0 заданий за 3 часа, 60 заданий за 4 часа и т. Д.

1 голос
/ 10 сентября 2011

Вы можете использовать

<schedule><cron_expr>0 * * * *</cron_expr></schedule>

и проверять код даже на несколько часов.Не элегантно, но это будет работать.Если он должен быть настраиваемым, вы можете добавить опцию конфигурации, чтобы контролировать частоту его запуска в часах.

Обновление:

Посмотрите на Mage_Cron_Model_Schedule в matchCronExpression method:

    // handle modulus
    if (strpos($expr,'/')!==false) {
        $e = explode('/', $expr);
        if (sizeof($e)!==2) {
            throw Mage::exception('Mage_Cron', "Invalid cron expression, expecting 'match/modulus': ".$expr);
        }
        if (!is_numeric($e[1])) {
            throw Mage::exception('Mage_Cron', "Invalid cron expression, expecting numeric modulus: ".$expr);
        }
        $expr = $e[0];
        $mod = $e[1];
    } else {
        $mod = 1;
    }

    // handle all match by modulus
    if ($expr==='*') {
        $from = 0;
        $to = 60;
    }
    // handle range
    elseif (strpos($expr,'-')!==false) {
        $e = explode('-', $expr);
        if (sizeof($e)!==2) {
            throw Mage::exception('Mage_Cron', "Invalid cron expression, expecting 'from-to' structure: ".$expr);
        }

        $from = $this->getNumeric($e[0]);
        $to = $this->getNumeric($e[1]);
    }
    // handle regular token
    else {
        $from = $this->getNumeric($expr);
        $to = $from;
    }

    if ($from===false || $to===false) {
        throw Mage::exception('Mage_Cron', "Invalid cron expression: ".$expr);
    }

    return ($num>=$from) && ($num<=$to) && ($num%$mod===0);

Он настроен для правильной обработки * / 2.

0 голосов
/ 17 октября 2011

Попробуйте установить задачу cron на * * / 02

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...