Magento Cron Job出人意料的行为

时间:2012-12-21 06:22:25

标签: magento cron crontab magento-1.7

我正在开发一个自定义的Magento模块并为它设置一个Cron作业。 每件事情都运转良好,但我担心Cron作业的意外行为(随机执行次数)。 当我手动执行cron.php时,它会调用我的模块的观察者方法超过1次(执行次数不固定,有时3次,有时5次等)。
我只想执行一次观察者的方法 这是我的代码。

1)Daffodil / 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

我只是想知道为什么观察者的方法执行次数(随机次数)?
有没有办法将计划的cron的状态更改为“COMPLETE”,这样它就不会执行两次?

1 个答案:

答案 0 :(得分:2)

我认为这是因为你的cron时间表:

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

您指定cron应始终运行。 Magento的cron.php只是收集所有cron作业的所有信息,并在Magento数据库的cron_schedule表中安排它们。

应该一直调用cron.php并管理所有其他cronjobs。

因此,例如,如果您将cronjob设置为每小时运行一次并定期调用cron.php,那么它每小时只会运行一次。

你会这样做:

    <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