Magento 1.9.1 cron_scheduleは永久に選択されません


12

私はほぼ3日間を費やし、スケジュールされたタスクを処理するMagento Cronを理解して作成することができませんでした。Magento 1.9.1.0を実行していますが、最近、注文メールがすぐに送信される代わりにキューに入れられることに気付きました。私は必要性を理解していますが、システムにキューを選択させることはできません。

これがCronjobの私の見方です。 ここに画像の説明を入力してください

これが私のcronjobコマンドラインです。 ここに画像の説明を入力してください

cron_scheduleテーブルでタスクを作成する方法は次のとおりです。 ここに画像の説明を入力してください

レコードはcron_scheduleテーブルに作成されるため、Cronは5分に1回実行されていると思います。PhpMyAdminを使用してこれらのレコードを手動で削除すると、しばらくするとレコードが自動的に作成されます。

ただし、タスクのステータスは「保留」のままであり、完了しません。私の設定に何か問題があるのか​​、何かが足りないのかわかりません。誰かがスケジュールされたタスクを時間通りに実行する方法を教えてください。また、1つのジョブコードに対して複数のレコードが作成されるのはなぜですか?

更新

テーブル全体をクリアし、cronがスケジュールされたジョブを作成しました。すべてのジョブは保留状態にあり、60分以上待機しても実行されません。Magento 1.9.1の何かがおかしい

更新11/02:今日、プロセスについてさらに分析を行いました。

以下のようにcron.phpを編集しました

echo 'iam before mdefault 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
echo 'iam before malways 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
echo 'i returned success';

Mage_Cron_Model_Observerクラスを次のように編集しました

public function dispatch($observer) {
  echo 'iam inside dispath';

私の理解では、cronが-mdefaultを実行すると、ディスパッチ関数が呼び出され、実行が行われます。しかし、何が起こったのかは、cron出力では次のとおりです。

Content-type: text/html

iam before mdefault 1iam before malways 1i returned success

これは、ディスパッチがまったく呼び出されないことを意味します...

もう一つ試して

変数を手動で変更し、$isShellDisabled = true;cron.phpで以下を変更しました。

if ($isShellDisabled) {
  echo 'before always';
  Mage::dispatchEvent('always');
  echo 'after always';
  Mage::dispatchEvent('default');
  echo 'after default';
} else {
  Mage::dispatchEvent($cronMode);
}

上記のcron出力は次のとおりです。

Content-type: text/html

before alwaysiam inside dispath alwaysafter always

現在では、「dispatchAlways」は呼び出されますが、「dispatch」は呼び出されません

答えはどれも私を助けません。スケジュールされたタスクを選択することはありません。つまり、Cronが初めて実行されたときに、テーブル内のタスクが正常に作成されました。ただし、タスクは実行されません。


Webブラウザーからcron.phpを実行するとどうなりますか?空白のページになりますが、cronタスクはどうなりますか?
ショーンブリーデン

bashスクリプトを使用してみてください:*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh可能な場合。
フィルバーニー

@seanbreeden、ブラウザでURLを介して実行すると、空白ページが表示されます。タスクには何も起こりませんでした。作成したタスクの新しいセットで質問を更新しました
...-Malaiselvan

@ PhilB、.shは違いを生じません。保留中のタスクがこれまで保留されているのと似ていますが、cronが5分ごとに実行されていると確信しています。
マレーセルバン

cron_scheduleテーブルを空にしようとしましたか?それはそう時間か後に、新しいタスクで埋めるの取得かどうかをチェック
サンダーMangel

回答:


3

それはCron JobsのPHPバージョンでした。

PHPバージョンがサイトに正しく設定されているため、機能していました。ただし、Cron JobsはサーバーネイティブPHP 5.3で実行されていたため、Cronを実行しているときにのみエラーが発生していました。バージョン5.5に更新しました。

変更されたCronコマンド:

php /home/mydomainname/public_html/cron.php
to
php55 /home/mydomainname/public_html/cron.php

またはhostgatorで:

/opt/php55/bin/php /home/mydomainname/public_html/cron.php

cron.phpで

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

この行の後に、次を追加します。

$isShellDisabled = true;

特定のPHPバージョン(私の場合はea-php70)でcron.phpを実行するという言及は、私が実行していた問題を修正しました:php -vターミナルで実行して、ターミナルが使用しているPHPバージョンを確認します。私の場合は5.6でした。そのphpためea-php70、inに変更して、PHP 7.0の使用を強制する必要がありましたcrontab -e。ありがとう!
ダーンヴァンデンベルグ

2

cron_scheduleテーブルを空にしようとしましたか?1時間ほどで新しいタスクでいっぱいになるかどうかを確認します。

また、Aoe_Schedulerを使用して特定のcronjobを無効にすることもできます。特定のエラーが他のすべてのタスクを停止させるエラーを引き起こす可能性があるかどうかを確認します。

Magento cronjobsがスクリプトで致命的なエラーを設定する方法により、すべてのタスクの実行が失敗します


答えてくれてありがとう。致命的なエラーはログに記録されますか?私は自分の症例に関するいくつかの発見を更新し、私の質問で同じことを更新しました。
マレーセルバン

@seanbreeden:今日、WebブラウザからCron.phpを起動すると、スケジュールを選択することでうまく動作することに気付きました。これは、どのスクリプトにも致命的なエラーがないことを証明しています。cronがcrontabを介して実行されない理由は何ですか?
マレーセルバン

2

最初のステップとして、設定をMagentoのデフォルトのcron設定に戻すことをお勧めします。

Magento Cronのデフォルト

現在の設定に問題があります。スケジュールは15分ごとに生成されますが、5分だけ先にスケジュールされ、10分のギャップが残ります。


ありがとう。デフォルトにリセットした後でも機能しません。初回実行時に、スケジュールされた時間でcron_scheduleテーブルにすべてのジョブが作成されました。ジョブは選択されることはなく、永久にテーブルに留まります。設定後に気づいたことの1 $isShellDisabled = true;つと、ブラウザーを介してCron.phpを起動すると、ジョブが選択されますが、CronTabは選択されません。
マレーセルバン

この問題はまだ解決されていません。ホスティングプロバイダーに問題はありますか。スクリプトは定期的にトリガーされますが、ジョブのみが選択されません。また、1.8から移行したので問題になりますか?
マレーセルバン

cronjobに十分なメモリがありますか?エラーログを試して、そこに役立つ可能性のあるものがないか確認してください。
クリストフ、フーマンで

この問題はまだ解決されていません...私は毎日頭を痛めています。エラーログ?どこで見ることができますか?
マレーセルバン

@Malaiselvanのエラーログについては、サーバーのエラーログの場所とアクセス方法を知っている必要があるため、システム管理者またはウェブホストに確認してください。また、コマンドラインからcronジョブを手動で実行すると役立つ場合があります。両方php -f cron.phpを試して、./cron.shさらに調査するために何かを生成するかどうかを確認してください。
クリストフ、フーマンで

1

私にとっても同じ問題。

「遅すぎます...」エラーが見つかりました。

cron_scheduleテーブルをクリーニングした後、cron.shは動作を停止しました(もうスケジューリングしていません)。

すべての古いCronプロセスを終了した後にのみ機能しました。


私の場合、Cronを初めて実行すると、テーブル内のタスクが正常に作成されました。ただし、タスクは実行されません。:-(
Malaiselvan

1

同じ問題がありました。私の問題は、タイムゾーン、特異的であった:created_atscheduled_atの列cron_scheduleの表はUTC + 0でなければなりません、私のエントリはUTC + 2でした。

これを確認するには、単にから日付を設定することができますcreated_atし、scheduled_at次のcronスケジュールまで、昨日と待つこと。

それが誰かを助けることを願っています!


1

Bluehostのcron.shの変更

 PHP_BIN=`which php`

 PHP_BIN="php54s"

共有ホスティングでは、デフォルトでPHP 5.2が実行されます。

またcron.php、2 $isShellDisabled行 を次のように置き換えて変更する必要がありました$isShellDisabled = true;

PHPの警告を取り除くために、これらの行も追加しました

$_SERVER['SCRIPT_NAME'] = 

if (empty($_SERVER['SCRIPT_FILENAME'])) $_SERVER['SCRIPT_FILENAME'] = '~/public_html/cron.php';
if (empty($_SERVER['SCRIPT_NAME'])) $_SERVER['SCRIPT_NAME'] = '/cron.php';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.