Как бы проверить cron с Magento? - PullRequest
21 голосов
/ 13 марта 2011

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

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

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

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

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

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

Ответы [ 5 ]

54 голосов
/ 14 марта 2011

Точка входа в cron Magento - это скрипт cron.php в корне Magento.Вам нужно будет настроить запись crontab для ОС, попав в этот скрипт, который, как вы, похоже, уже сделали.

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

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

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

Дублировать пробеги?

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

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

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

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

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

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

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

8 голосов
/ 23 июня 2012

добавление их в конец 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("Y-m-d H:i:s").PHP_EOL);
fclose($log);
} catch (Exception $e) {
    Mage::printException($e);
}
7 голосов
/ 10 июня 2011

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

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

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

try {
   $myFile = "cronlog.txt";
   $fh = fopen($myFile, 'w');
   $stringData = date('l jS \of F Y h:i:s A');
   fwrite($fh, $stringData);
   fclose($fh);
} catch (Exception $e) {
   Mage::printException($e);
}
3 голосов
/ 11 апреля 2015

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

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

3 голосов
/ 16 июня 2011

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

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