2

カスタム Magento モジュールに取り組んでおり、Cron ジョブをセットアップしています。すべて正常に動作していますが、Cron ジョブ (実行の乱数) の予期しない動作が心配です。cron.php を手動で実行すると、モジュールのオブザーバーのメソッドが 1 回以上呼び出されます (実行回数は固定されておらず、3 回、5 回など)。
オブザーバーのメソッドを一度だけ実行したいだけです。
これが私のコードです。

1) 水仙/Birthdaywish/etc/config.xml

...
 ...
 <crontab>
        <jobs>
            <daffodil_birthdaywish>
                <schedule>
                    <cron_expr>* * * * * *</cron_expr>
                </schedule>
                <run>
                    <model>birthdaywish/observe::sendBirthdayMail</model>
                </run>
            </daffodil_birthdaywish>
        </jobs>
 </crontab>
 ...

2) 水仙/Birthdaywish/Model/observe.php

Class Daffodil_Birthdaywish_Model_Observe {

    public function sendBirthdayMail() {

         echo "<h1>Hello</h1>";

    }

}

cron.php を実行すると、予想される出力は
Hello
になるはずですが 、現在の出力は、いつか
Hello Hello Hello

であり、
いつか Hello Hello Hello Hello Hello Helloです。

オブザーバーのメソッドが何回も実行されている理由を知りたいだけです(ランダム回数)?
スケジュールされたcronのステータスを「COMPLETE」に変更して、2回実行されないようにする方法はありますか?

4

1 に答える 1

2

これはあなたのcronスケジュールによるものだと思います:

    <schedule>
        <cron_expr>* * * * * *</cron_expr>
    </schedule>

cron を常に実行するように指定します。Magento の cron.php は、すべての cron ジョブからすべての情報を収集し、Magento データベースの cron_schedule テーブルにそれらをスケジュールします。

cron.php は常に呼び出す必要があり、他のすべての cron ジョブを管理します。

したがって、たとえば、cronjob を 1 時間に 1 回実行するように設定し、定期的に cron.php を呼び出すと、1 時間に 1 回だけ実行されます。

次のようにします。

    <schedule>
        <cron_expr>0 * * * *</cron_expr>
    </schedule>

そのため、毎時間 0 分 (5 時、6 時など) に実行されます。

こちらもご覧ください: http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job

于 2012-12-21T14:40:53.913 に答える