【问题标题】:Magento invalid cron expressionMagento 无效的 cron 表达式
【发布时间】: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 cron


    【解决方案1】:

    Magento 1 中的 cron 表达式可以有五或六列(字段)。列分隔符是空格。

    如果少于五列或多于六列,您将收到 Mage_Cron_Exception 消息“无效的 cron 表达式:”,其中 替换为正在解析的配置选项的逐字字符串值。这是您在问题中的确切异常消息。

    如果将基本空白解析为正确数量的列失败,或者如果任何列无法解析为以下任何 cron 表达式,则会给出此最通用的 Mage_Cron_Exception 消息:

    • * - 全部匹配
    • ...,... - 多个选项(逗号分隔的每个选项都必须再次验证)
    • ...\... - 模数(两个元素,第二个必须是数字)
    • ...-... - 数字数据的范围(从 - 到),月份和工作日名称的三字母英文缩写被翻译成对应的数字(使用“mon”表示月份将产生 1(一月),“sun”表示月份为 0(未定义但并非无效)等)。
    • number, abbreviation - 只是一个数值或三个字母的工作日或月份缩写(不区分大小写,前三个字母计数,例如 "MaYbE" em> 将被散列为 "may" 导致查找数字五 (5))。

    如果其中任何一个(或在多个选项的情况下,任何子选项)导致一些解析问题,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) 的子集。第六个字段(年份)可以设置,但从不考虑。

    【讨论】:

      【解决方案2】:

      默认情况下,Magento 使用SimpleTrigger 格式(具有 5 个字段的格式),但是您的 cron 此处为 CronTrigger 格式。

      我不是 cron 专家,但我认为您的 cron 设置了每天凌晨 4 点运行的时间表(查看here);只需尝试在 SimpleTrigger format 中重新设置它的样式即可:

      0 4 * * *
      

      【讨论】:

      • 很有趣,但是 "SimpleTrigger 格式" 记录在哪里?您在答案中提供的参考仅显示 Java 代码的 API 示例,而不是 cron 表达式的格式描述。
      猜你喜欢
      • 2017-10-24
      • 2018-10-27
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2012-11-30
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多