Magento 1.9.1 cron_schedule永远不会被选择


12

我花了将近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首次运行时,它已成功在表中创建了任务。但是它从不执行任务。


从网络浏览器运行cron.php会发生什么?这将是空白页,但是我的意思是您的cron任务会怎样?
seanbreeden

尝试使用bash脚本:(*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh如果可用)。
Phil Birnie

@seanbreeden,当我通过浏览器上的URL运行时,它显示空白页面。任务什么都没有发生。.我用创建的新任务集更新了问题……
Malaiselvan 2015年

@ PhilB,.sh没有任何区别。类似于待决任务永远待决,但我确信cron每5分钟运行一次。
Malaiselvan'2

您是否尝试清空cron_schedule桌子?一个小时左右后检查它是否充满了新任务
Sander Mangel

Answers:


3

它是Cron Jobs的PHP版本。

为该站点正确设置了PHP版本,这就是为什么它可以正常工作的原因。但是Cron Jobs在服务器本机PHP 5.3上运行,这就是为什么我仅在运行Cron时才得到错误。我更新到5.5版。

更改了Cron命令:

php /home/mydomainname/public_html/cron.php
to
php55 /home/mydomainname/public_html/cron.php

或在hostgator中:

/opt/php55/bin/php /home/mydomainname/public_html/cron.php

在cron.php中

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

在此行之后,添加:

$isShellDisabled = true;

提到在特定的PHP版本中运行cron.php(在我的情况下为ea-php70)解决了我遇到的问题:php -v在终端中运行以查看终端使用的PHP版本。在我的情况下是5.6。所以我不得不通过更改phpea-php70in 来强制使用PHP 7.0 crontab -e。谢谢!
达恩·范登·伯格

2

您是否尝试清空cron_schedule桌子?一个小时左右后,检查它是否充满了新任务。

您也可以使用Aoe_Scheduler禁用特定的cronjob。查看是否有任何一个特定的错误可能会导致其他所有任务暂停。

Magento cronjobs在脚本中设置致命错误的方式将导致所有任务的执行失败


谢谢你的回答。致命错误是否记录在任何日志中?我更新了有关此案的其他发现,并在问题中也进行了更新。
Malaiselvan

@seanbreeden:今天我注意到,当我通过Web浏览器启动Cron.php时,通过选择时间表可以很好地工作。这证明在任何脚本中都没有致命错误。知道为什么cron无法通过crontab运行吗?
Malaiselvan 2015年

2

第一步,我建议将您的设置恢复为Magento的默认cron设置:

Magento Cron默认值

您当前的设置存在问题:您的日程安排每15分钟生成一次,但仅提前5分钟进行安排,因此有10分钟的间隔。


谢谢。即使我重设为默认值,它也不起作用。第一次运行时,它使用计划的时间在cron_schedule表中创建了所有作业。这些工作永远不会被选择,并且永远待在表中。设置后$isShellDisabled = true;,我注意到一件事,当我通过浏览器启动Cron.php时,将选择作业,而不是通过CronTab。
Malaiselvan 2015年

这个问题尚未解决。我的托管服务提供商会出现问题吗?我看到脚本定期触发,但仅未选择作业。自从1.8迁移以来,这还会有问题吗?
Malaiselvan 2015年

您的cronjob是否有足够的记忆力?尝试错误日志以查看其中是否有任何帮助。
克里斯托夫在Fooman,2015年

这个问题还没有解决...每天我都伤脑筋。错误日志?我在哪里可以看到这些?
Malaiselvan'5

@Malaiselvan的错误日志,请与系统管理员或网络主机联系,因为他们应该知道位置以及如何访问服务器的错误日志。此外,从命令行手动运行cron作业也可能会有所帮助-尝试两者php -f cron.php./cron.sh查看它们是否产生了进一步调查的内容。
克里斯托夫在弗曼(Fooman),2015年

1

对我来说同样的问题。

发现“太晚了……”错误。

清理cron_schedule表后,cron.sh停止工作(不再进行调度)。

仅在杀死所有旧的Cron进程后才能工作。


就我而言,当Cron首次运行时,它成功地在表中创建了任务。但是它从不执行任务。:-(
Malaiselvan

1

我有同样的问题。我的问题是特定于时区的:表中的created_atscheduled_atcron_schedule应为UTC + 0,我的输入为UTC + 2。

为了验证这一点,你可以简单地从设定的日期created_atscheduled_at昨天和等待,直到下一次的cron时间表。

希望能帮助到某人!


1

在Bluehost上,在cron.sh中进行更改

 PHP_BIN=`which php`

 PHP_BIN="php54s"

默认情况下,在共享托管中,它运行PHP 5.2。

我还必须进行更改cron.php,将两$isShellDisabled行 替换为$isShellDisabled = true;

为了摆脱PHP警告,我还在之前添加了以下几行

$_SERVER['SCRIPT_NAME'] = 

if (empty($_SERVER['SCRIPT_FILENAME'])) $_SERVER['SCRIPT_FILENAME'] = '~/public_html/cron.php';
if (empty($_SERVER['SCRIPT_NAME'])) $_SERVER['SCRIPT_NAME'] = '/cron.php';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.