Как протестировать cron с Magento?

Сначала мне нужно понять, как работает Magento cron.

Я знаю, как cron работает на linux, используя crontab -e .
Я знаю, что мне нужно настроить cron.php Magento для периодического запуска

Но когда я определяю cron в файле конфигурации magento, как они совпадают, они должны быть запущены?

Потому что, если установить мой cron.php для запуска каждые 15 минут ( 0,15,30,45 * * * * ), и у меня есть Magento cron <schedule><cron_expr>10 * * * *</cron_expr></schedule> например.

Как это будет соответствовать / работать?

Кстати, как я могу проверить, работает ли мой cron, не дожидаясь долгого времени?

Related of "Как протестировать cron с Magento?"

Пункт входа cron в Magento – это скрипт cron.php в вашем корне Magento. Вам нужно будет настроить запись crontab операционной системы, чтобы этот сценарий, который вы, похоже, уже сделали.

Как работает cron

Каждый раз, cron.php скрипт cron.php попадает, происходят три вещи:

  • Расписание : Magento анализирует config.xml файлы config.xml для записей jobs <config><crontab>...</crontab></config> , читая их элементы cron_expr для подробного cron_expr того, как часто их следует запускать. Затем Magento заполняет таблицу расписания cron заданиями, которые должны выполняться в будущем, а также временными отметками, когда они должны запускаться. Степень в будущем, которую Magento делает, настраивается администратором.
  • Выполните : Magento считывает таблицу расписания cron для заданий, которые должны быть выполнены в эту же секунду, и заданий, которые должны были быть выполнены, т. Е. С отметками времени в прошлом, которые еще не истекли. Предел истечения также является параметром, настраиваемым в admin.
  • Очистка : Magento просматривает таблицу расписания, удаляя задания, которые были завершены или пропущены (из-за крайнего срока).

Дублированные прогоны?

Вы поднимаете интересный момент. Что произойдет, если у вас запланирован 10-минутный cron в Magento, но cron.php гарантированно только каждые 15 минут. Похоже, что Magento будет запускать ваши задания Magento дважды, в некоторых случаях:

  • HH: 00 -> HH: 50 и HH: 00
  • HH: 15 -> HH: 10
  • HH: 30 -> HH: 20 и HH: 30
  • HH: 45 -> HH: 40

Я только прочитал код, и вот что происходит. Лучшим способом узнать, конечно, было бы запустить его и выяснить. Если вы хотите избежать этой проблемы, в большинстве случаев увеличьте cron.php выполнения cron.php каждые 5 минут, что и мы делаем.

Тестирование вашего кода

Если вы хотите проверить, действительно ли ваш cron работает без ожидания возраста, установите cron_expr для выполнения каждую минуту или очистите таблицу расписания cron, а затем дважды нажмите cron.php (один раз для создания расписания и снова для запуска задания ).

Если вы хотите просто проверить, работает ли ваша модель, вы можете настроить тестовый скрипт (описанный в https://www.nicksays.co.uk/testing-magent-modules ) и запустить его.

Ваш вопрос вызвал сообщение в блоге: https://www.nicksays.co.uk/dissecting-the-magento-cron-system 🙂

добавив их в нижнюю часть cron.php, он будет выписывать cron.php.log при выполнении с дат-временем

 try { Mage::getConfig()->init()->loadEventObservers('crontab'); Mage::app()->addEventArea('crontab'); Mage::dispatchEvent('default'); $log = fopen(__FILE__.'.log', 'a'); fwrite($log, date("Ymd H:i:s").PHP_EOL); fclose($log); } catch (Exception $e) { Mage::printException($e); } по try { Mage::getConfig()->init()->loadEventObservers('crontab'); Mage::app()->addEventArea('crontab'); Mage::dispatchEvent('default'); $log = fopen(__FILE__.'.log', 'a'); fwrite($log, date("Ymd H:i:s").PHP_EOL); fclose($log); } catch (Exception $e) { Mage::printException($e); } 

Во второй половине вашего вопроса … как узнать, работает ли его.

Вот что я сделал. Я добавил следующий код в конце файла cron.php. Это обновляет простой журнал под названием «cronlog.txt» каждый раз, когда вызывается запрос cron.php.

Поэтому, если у меня есть сомнения в работе cron, я могу просто взглянуть на этот файл и увидеть последнюю дату и время работы cron.php.

 try { $myFile = "cronlog.txt"; $fh = fopen($myFile, 'w'); $stringData = date('l jS \of FY h:i:s A'); fwrite($fh, $stringData); fclose($fh); } catch (Exception $e) { Mage::printException($e); } 

Если вы работаете в GNU / Linux, вы можете проверить /var/log/syslog и отфильтровать cronjobs с помощью grep . Чтобы просмотреть список всех запущенных cronjob, введите grep 'cron' /var/log/syslog .

Чтобы проверить работу cron или нет, вы можете просто написать Mage::log('cron working', null, 'cron.log'); в конце файла cron.php.

Если cron работает, он создаст файл cron.log в вашем базовом каталоге.