3

多くのcronジョブが定期的に実行されているMagentoEnterprise1.9ベースのWebサイトを継承しました。

これらのcronジョブはサードパーティのモジュールによって構成されており、Magentoのコアの一部ではありません。

1セットのジョブは、Magentoから倉庫管理システムへのデータファイルのエクスポートとインポートを処理します。cronジョブは、ある種のループでスタックし、数分しかかからない場合でも数時間処理を続けることがあります。

各スクリプト自体を変更せずに、これらのジョブにかかる時間をなんとかして監視したいと思います。もしそのようなことが可能なら、おそらくある種のオブザーバー?

何か案は?

4

3 に答える 3

3

Magentoでのスケジュールされたジョブのスケジュールと実行に関する基本的な洞察は、core_scheduleテーブルから収集できます。エントリは、 [システム]>[構成]>[システム]>[cronスケジュール]の設定に従って追加および削除されることに注意してください。スケジュールされたジョブ構成(クラス、メソッド、およびcron式)の発信元は<crontab />、任意のモジュールのconfig.xmlのノードから判別できます。

これらの多くは、Fabrizio BrancaのAOE_Schedulerモジュール(リンク)を使用して、管理者で視覚化および操作できます。

パフォーマンス(メモリ使用量、開始/停止時間)を取得するには、これらのcron起動スクリプトでいくつかのロギング呼び出しをドロップする必要がある場合があります。

于 2013-01-07T14:49:44.480 に答える
2

cron_scheduleテーブルから作成されたフォーマット済みテーブルを実行するスクリプトを作成します。

リンクの投稿についてはいつものことを知っていますが、MagentoCommerce.comはおそらくすぐになくなることはなく、ここにコードを投稿するのはロイヤルPITAです。cron_scheduleを読み取り、完全なレポートを作成するPHPスクリプトへのリンクは次のとおりです。コードについては下部を参照してください。システム構成のcronセットアップに移動し、情報を24時間保存するように指示します。

ここに画像の説明を入力してください

これで、次の出力サンプルのように、スケジュールされているすべてと実行されたすべてを確認できます。

ここに画像の説明を入力してください ここに画像の説明を入力してください

リンク上のMageBayvaporationについて申し訳ありませんが、私は最も重要なものをここに移動しようとしましたが、これを見逃しました。幸いなことに、それはまだサイトの1つで稼働しています。

<?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("Y-m-d");
$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);
?> 
于 2013-02-20T05:08:18.197 に答える
0

私には、ジョブが実行されている時間の長さがわからず、cronで何が起こっているのかについての良い洞察がないという同じ懸念を持っていたクライアントがいます。そこにはいくつかの解決策がありましたが、彼らは彼らが望んでいたことを完全には実行しなかったので、私はJob HealthDataVaultと呼ぶ小さなサービスを構築することになりました。どなたでも無料でご利用いただけます。

于 2018-07-13T17:24:32.763 に答える