私はほぼ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が初めて実行されたときに、テーブル内のタスクが正常に作成されました。ただし、タスクは実行されません。
*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh
可能な場合。
cron_schedule
テーブルを空にしようとしましたか?それはそう時間か後に、新しいタスクで埋めるの取得かどうかをチェック