【发布时间】:2015-12-22 06:00:20
【问题描述】:
我在 Magento 中安装的一个扩展程序有一个用表达式 0 0 4 1/1 * ? * 安排的 cron。根据我收集的信息,它应该每天凌晨 4 点运行。
当 Magento cron 运行时,我收到一个错误报告:Invalid cron expression: 0 0 4 1/1 * ? *。我无法找到有关 Magento crons 有效格式的任何信息。他们应该只有 5 个字段吗?
【问题讨论】:
我在 Magento 中安装的一个扩展程序有一个用表达式 0 0 4 1/1 * ? * 安排的 cron。根据我收集的信息,它应该每天凌晨 4 点运行。
当 Magento cron 运行时,我收到一个错误报告:Invalid cron expression: 0 0 4 1/1 * ? *。我无法找到有关 Magento crons 有效格式的任何信息。他们应该只有 5 个字段吗?
【问题讨论】:
Magento 1 中的 cron 表达式可以有五或六列(字段)。列分隔符是空格。
如果少于五列或多于六列,您将收到 Mage_Cron_Exception 消息“无效的 cron 表达式:”,其中
如果将基本空白解析为正确数量的列失败,或者如果任何列无法解析为以下任何 cron 表达式,则会给出此最通用的 Mage_Cron_Exception 消息:
* - 全部匹配...,... - 多个选项(逗号分隔的每个选项都必须再次验证)...\... - 模数(两个元素,第二个必须是数字)...-... - 数字数据的范围(从 - 到),月份和工作日名称的三字母英文缩写被翻译成对应的数字(使用“mon”表示月份将产生 1(一月),“sun”表示月份为 0(未定义但并非无效)等)。如果其中任何一个(或在多个选项的情况下,任何子选项)导致一些解析问题,Mage_Cron_Exception 和消息 “无效的 cron 表达式” 以附加信息为后缀,例如:
",期望 'from-to' 结构:
",期望 'match/modulus':"
",期望数值模数:
...等等
Cron 表达式解析在 Mage_Cron_Model_Schedule::getCronExprArr() 和 Mage_Cron_Model_Schedule::matchCronExpression() 中完成。
0 0 4 1/1 * ? *
在您的情况下,cron 表达式具有正确数量的字段(六个),但您为第五列拥有的值“?”没有在 Magento cron 表达式中解析,从而导致通用消息(因为它没有被识别作为任何字段值格式)。
格式是CRON expression (as given per Wikipedia) 的子集。第六个字段(年份)可以设置,但从不考虑。
【讨论】:
默认情况下,Magento 使用SimpleTrigger 格式(具有 5 个字段的格式),但是您的 cron 此处为 CronTrigger 格式。
我不是 cron 专家,但我认为您的 cron 设置了每天凌晨 4 点运行的时间表(查看here);只需尝试在 SimpleTrigger format 中重新设置它的样式即可:
0 4 * * *
【讨论】: