Подтвердить что ты не робот

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

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

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

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

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

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

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

Ответ 1

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

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

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

  • Расписание. Magento анализирует объединенные файлы config.xml для записей <config><crontab>...</crontab></config> jobs, читая их элементы 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 каждые 5 минут, что и мы делаем.

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

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

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

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

Ответ 2

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

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);
}

Ответ 3

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

Вот что я сделал. Я добавил следующий код в конце файла 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);
}

Ответ 4

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

Ответ 5

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

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