Magento: мониторинг времени выполнения всех заданий cron?

Я унаследовал веб-сайт Magento Enterprise 1.9, на котором много заданий cron работает регулярно.

Эти задания cron настраиваются сторонними модулями и не являются частью ядра Magento.

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

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

Есть идеи?

Создайте скрипт, который создает форматированную таблицу, созданную из таблицы cron_schedule .

Я знаю о том, что обычно публикую ссылки, но MagentoCommerce.com, вероятно, скоро не уйдет в прошлое, и получение здесь кода – это королевская PITA. Итак, вот ссылка на скрипт PHP, который читает cron_schedule и создает полный отчет. См. Внизу для кода. Зайдите в настройки конфигурации системы и сообщите ему, чтобы сохранить информацию в течение 24 часов.

введите описание изображения здесь

Теперь вы можете увидеть все, что запланировано, и все, что было выполнено, как в следующих выходных образцах.

введите описание изображения здесьвведите описание изображения здесь

Извините за MageBayvaporation по ссылке, я попытался переместить здесь самое важное, но пропустил это. К счастью, он все еще работает на одном из сайтов.

<?php /****************************************************** * Magento Log File Contents Monitor. * Released under the Digital Damnation Copyright * Free to do whatever the 7734 you want to do with it. * provided without warranty or support ******************************************************/ /*********************** * Scan Magento local.xml file for connection information * Run out of password protected scripts/ directory ***********************/ if (file_exists('../app/etc/local.xml')) { $xml = simplexml_load_file('../app/etc/local.xml', NULL, LIBXML_NOCDATA); $db['host'] = $xml->global->resources->default_setup->connection->host; $db['name'] = $xml->global->resources->default_setup->connection->dbname; $db['user'] = $xml->global->resources->default_setup->connection->username; $db['pass'] = $xml->global->resources->default_setup->connection->password; $db['pref'] = $xml->global->resources->db->table_prefix; $tables = array( 'dataflow_batch_export', 'dataflow_batch_import', 'log_customer', 'log_quote', 'log_summary', 'log_summary_type', 'log_url', 'log_url_info', 'log_visitor', 'log_visitor_info', 'log_visitor_online', 'catalog_compare_item', 'report_event', 'report_compared_product_index', 'report_viewed_product_index', 'sales_flat_quote', 'sales_flat_quote_address', 'sales_flat_quote_address_item', 'sales_flat_quote_item', 'sales_flat_quote_item_option', 'sales_flat_quote_payment', 'sales_flat_quote_shipping_rate' ); } else { exit('Failed to open ../app/etc/local.xml'); } /** Get current date, time, UTC and offset **/ $date = date("Ymd"); $time = date("H:i:s T"); $offset = date("P"); $utc = gmdate("H:i:s"); /*********************** * Start HTML output ***********************/ echo '<html><head><title>Magento Log File Contents on ' . $date . ' ' . $time . '</title> <meta http-equiv="refresh" content="30"> <style type="text/css">html {width: 100%; font-family: Arial,Helvetica, sans-serif;} body {line-height:1.0em; font-size: 100%;} table {border-spacing: 1px;} th.stattitle {text-align: left; font-size: 100%; font-weight: bold; color: white; background-color: #101010;} th {text-align: center; font-size: 90%; font-weight: bold; padding: 5px; border-bottom: 1px solid black; border-left: 1px solid black; } td {font-size: 90%; padding: 4px; border-bottom: 1px solid black; border-left: 1px solid black;} </style> </head><body>'; /** Output title, connection info and cron job monitor runtime **/ echo '<h2>Magento Log File Contents Report</h2><h3>Connection: '.$db['user'].'@'.$db['host'].'&nbsp;&nbsp;&ndash;&nbsp;&nbsp;Database: ' . $db['name'] . '</h3>'; echo '<h3>Runtime: ' . $date . '&nbsp;&nbsp;&nbsp;' .$time . '&nbsp;&nbsp;&nbsp;' . $utc . ' UTC</h3>'; echo '<h4>Note: Your timezone offset is ' . $offset . ' hours from UTC</h4>'; /** Connect to database **/ $conn = mysql_connect($db['host'],$db['user'],$db['pass']); @mysql_select_db($db['name']) or die(mysql_error()); /*********************** * Get table record counts ***********************/ echo '<table><tbody><tr><th class="stattitle" colspan="2">Log Tables</th></tr>'; echo '<tr><th>Table</th><th>Row Count</th></tr>'; foreach($tables as $tblname) { $result = mysql_query('SELECT COUNT(*) FROM ' . $db['pref'] . $tblname) or die(mysql_error()); $numrows = mysql_fetch_array($result); $num = $numrows[0]; /* Table output */ echo '<tr>'; echo '<td>'.$db['pref'].$tblname.'</td>'; echo '<td align="right">'.$num.'</td>'; echo '</tr>'; } echo '</tbody></table></body></html>'; /*********************** * End of report ***********************/ mysql_close($conn); ?> 

Основное представление о планировании и выполнении запланированных заданий в Magento можно почерпнуть из таблицы core_schedule . Обратите внимание, что записи добавляются и удаляются в соответствии с настройками из System> Configuration> System> Cron Schedule . Начальная конфигурация запланированных заданий (класс, метод и выражение cron) может быть определена с узла <crontab /> в любом файле config.xml данного модуля.

Многие из них могут быть визуализированы и взаимодействовать с администратором с помощью модуля AOE_Scheduler Фабрицио Бранки (ссылка) .

Чтобы зафиксировать производительность (использование памяти, время начала / остановки), может потребоваться отбросить некоторые вызовы регистрации в этих сценариях, запущенных на cron.