Настройка работы CRON в Magento - PullRequest
1 голос
/ 13 апреля 2011

Существует множество обучающих программ по настройке cron, и я думаю, что я сделал это правильно, но по какой-то причине это не работает.Я также создал класс контроллера для тестирования модели, и он работает правильно.

Вот мой config.xml:

<config>
    <modules>
        <VPS_Export>
            <version>0.1.0</version>
        </VPS_Export>
    </modules>
    <global>
        <models>
            <vps_export>
                <class>VPS_Export_Model</class>
            </vps_export>
        </models>
        <helpers>
            <vps_export>
                <class>VPS_Export_Helper</class>
            </vps_export>
        </helpers>
    </global>
<frontend>
    <routers>
        <vps_export>
            <use>standard</use>
            <args>
                <module>VPS_Export</module>
                <frontName>vpsexport</frontName>
            </args>
        </vps_export>
    </routers>  
</frontend>
    <crontab>
        <jobs>
            <vps_export>
                <schedule>
                    <cron_expr>*/5 * * * *</cron_expr><!-- every 5 minutes -->
                </schedule>
                <run>
                    <model>vps_export/observer::exportProducts</model>
                </run>
            </vps_export>
        </jobs>
    </crontab>
</config>

Мой файл Observer.php:

<?php
class VPS_Export_Model_Observer
{
    public function exportProducts()
    {
        echo "VPS Export Products called!";
        Mage::Log("exportProducts called!");
    }
}
?>

И мой тестовый файл IndexController.php:

<?php
class VPS_Export_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        echo "index action called!";
        Mage::getModel('vps_export/observer')->exportProducts();
    }
}
?>

Если я укажу свой браузер на http://my_server/vpsexport/index, я увижу правильный вывод из операторов echo и сообщение будет напечатано в журнале, поэтому я знаю, что модель правильно настроена.Однако cron не дает таких же результатов.Если я запускаю cron.php вручную, я не получаю ошибок, но он все равно ничего не делает.

Есть мысли?

Ответы [ 3 ]

4 голосов
/ 13 апреля 2011

Насколько я понимаю, система cron magento работает в 2 этапа:

  1. проверяет модули config.xml, чтобы найти методы, которые должен запускать cron, и вставляет их в базу данных (cron_schedule)
  2. получает информацию из этой таблицы и запускает методы, соответствующие столбцу scheduled_at с фактическим временем.

Как вы говорите, в вашей таблице cron_schedule есть записи, первая фаза в порядке
Поэтому, чтобы проверить, хорошо ли работает ваш cron, вам действительно нужно настроить cronjob на вашем сервере, который будет вашим компьютером, если вы работаете локально.
На самом деле это очень просто в Ubuntu, я думаю, что это будет сложнее в Windows, но (опять-таки догадываясь) не возможно.
Или, может быть, обновление вашего браузера, указывающего на файл cron.php, несколько раз каждые 5 минут (как вы настроили его в файле config.xml) поможет, но настройка cronjob будет более эффективной:)
Надеюсь, что поможет

edit: вот как выглядит мой cronjob, если он вам поможет:

*/5 * * * * wget -q http://magento.local/cron.php
0 голосов
/ 27 мая 2013

Я знаю, что это спустя годы, но я должен немного расширить. Я вроде ошибочен, так как при запуске PHP из командной строки с включенным APC используется собственный закрытый кеш. Если вы запускаете задания cron через веб-сервер, значит, его существующий кеш доступен и добавлен в.

Это будет хранить соответствующие вещи от запуска к запуску. Использование APC с заданием из командной строки является потенциальным препятствием, поскольку все, что вы, возможно, делаете, это загружаете кеш, а затем удаляете его.

0 голосов
/ 16 апреля 2012

Может быть принципиальное различие в производительности и последствиях того, как вы запускаете скрипт cron, в зависимости от того, вызывается ли он изначально или через ваш веб-сервер.

Одним из важных отличий является использование APC.опкод кешер для PHP (что действительно хорошая идея 1004 *).Согласно документации, доступ к PHP из командной строки очистит кеш, что, вероятно, не то, что вы действительно хотите делать каждые 5 минут!

...