Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento Cron作业意外行为_Magento_Cron_Crontab_Magento 1.7 - Fatal编程技术网

Magento Cron作业意外行为

Magento Cron作业意外行为,magento,cron,crontab,magento-1.7,Magento,Cron,Crontab,Magento 1.7,我正在处理一个自定义Magento模块,并为其设置了一个Cron作业。 一切正常,但我担心Cron作业的意外行为(随机执行次数)。 当我手动执行cron.php时,它调用我模块的观察者方法超过1次(执行次数不固定,有时3次,有时5次等)。 我只想执行observer的方法一次。 这是我的代码。 1)水仙花/Birthdaywish/etc/config.xml ... ... <crontab> <jobs> <daffo

我正在处理一个自定义Magento模块,并为其设置了一个Cron作业。 一切正常,但我担心Cron作业的意外行为(随机执行次数)。 当我手动执行cron.php时,它调用我模块的观察者方法超过1次(执行次数不固定,有时3次,有时5次等)。
我只想执行observer的方法一次。
这是我的代码。

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>";

    }

}
类水仙花\u生日愿望\u模型\u观察{
公共函数sendbhirthdaymail(){
回音“你好”;
}
}
如果我执行cron.php,预期的输出应该是
你好
但电流输出需要一段时间
你好你好

还有一段时间
你好

我只是想知道为什么观测者的方法是执行次数(随机次数)

有没有办法将定时cron的状态更改为“完成”,这样它就不会执行两次

我认为这是因为您的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 * * * *
因此,它每小时在0分钟(5点、6点等)运行一次


还可以看看这里:

我认为这个解决方案会奏效。因为当cron表达式为******时,它意味着将每秒运行一次。这取决于服务器的运行情况。