我花了将近3天的时间,无法理解并使Magento Cron处理预定的任务。我正在运行Magento 1.9.1.0,最近发现订单电子邮件现在已排队,而不是立即发送。我了解必要性,但无法使系统选择队列。
这是我看到的Cronjob。
这是我的cronjob命令行。
这是在cron_schedule表中创建任务的方式。
由于记录是在cron_schedule表中创建的,因此我认为Cron每5分钟运行一次。如果我通过PhpMyAdmin手动删除这些记录,则记录会在一段时间后自动创建。
但是任务的状态仍然是“待处理”,永远不会完成。不知道我的配置中有什么问题还是我丢失了任何东西。有人可以帮助我如何使计划的任务按时运行。另外,为什么要为一个职务代码创建多个记录?
更新资料
我清理了整个表,然后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时,它应该调用dispatch函数,然后执行就会发生。但是发生的情况如下在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
桌子?一个小时左右后检查它是否充满了新任务