2012-12-21 35 views
2

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

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 /型号/ observe.php

Class Daffodil_Birthdaywish_Model_Observe { 

    public function sendBirthdayMail() { 

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

    } 

} 

如果我执行的cron。 php的预期输出应该是
你好
但电流输出一段时间
你好你好你好

和一段时间
你好你好你好你好你好

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

回答

2

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

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

您指定的cron应该运行所有的时间。 Magento的cron.php只收集来自所有cron作业的所有信息,并将它们安排在Magento数据库的cron_schedule表中。

应该一直调用cron.php,它管理所有其他的cronjob。

因此,例如,如果您将您的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

+0

我认为这个解决方案将起作用。因为当你的cron表达式是 * * * * * *这意味着每秒钟都会运行。这取决于您的服务器正在运行。 –