Magento上的定时任务不能正常工作

3

我有一个与Magento cron表达式相关的问题。 它在分钟方面运行良好:

    <crontab>
    <jobs>
        <namespace_module_cron>
            <schedule>
                <cron_expr>*/15 * * * *</cron_expr>
            </schedule>
            <run>
                <model>namespace_module/observer::myMethod</model>
            </run>
        </namespace_module_cron>
    </jobs>
</crontab>

但是当我设置小时数时,它就无法工作了:
<cron_expr>0 1 * * *</cron_expr>

或者

<cron_expr>0 */1 * * *</cron_expr>

我在管理员面板中尝试了不同的时间设置。目前有以下选项:

  • 15
  • 1
  • 60
  • 120
  • 120
  • 3000

附:Magento版本 1.7.0.1

更新

我将每小时执行一次的任务(0 */1 * * *)保留了一天,实际上已经运行:

  • 14:15
  • 16:15
  • 21:15
  • 22:15
  • 03:15
  • 04:15
4个回答

4
我已经找出问题所在。它是设置问题(System/Configuration/System/Cron)。 当我将"Schedule Ahead for"设置为60时,它开始正常工作(每小时和每天的计划)。 现在数据库中的计划出现在15:20,但我需要在16:00执行它。
设置如下:
  • 每15分钟生成计划
  • 提前60分钟生成计划
  • 如果60分钟内未运行,则错过
  • 每120分钟清理历史记录
  • 成功历史记录生命周期为120分钟
  • 失败历史记录生命周期为3000分钟
如果你遇到同样的问题,应该注意前两个设置:"Generate Schedules Every"和"Schedule Ahead for"

如果你还记得,你知道之前设置了什么,当它不起作用时?这是有用的知识! - Jacob Raccuia

1
每小时的0分(00:00、01:00、02:00等),必须输入“:”。
<cron_expr>0 * * * *</cron_expr>

谢谢您的回复。但我真的需要小时而不是分钟。就像我说的 - 分钟可以正常工作,但小时不行。我可以设置每两个小时运行一次脚本(0 */2 * * *)。在我的当前任务中,我需要在每天凌晨1点运行脚本,但我发现第二项(小时)根本不起作用。无论是每天还是每小时或每五个小时都不行。 - jin
奇怪,我定义了类似于<cron_expr>0 0 * * *</cron_expr>的cronjobs,并且它完美地工作。您是否在cron_schedule表中看到您的cronjob已计划? - Jscti
如果表达式中有分钟 - 它在表格中。小时 - 不在。 - jin
你应该明白Magento只能调度接下来的cronjobs(如果我没记错的话,只有未来4小时内的),如果是这样的话,很抱歉我无法帮助你:( - Jscti
我的Linux crontab每5分钟执行一次http://mysite.com/cron.php。并且计划每15分钟生成一次。如果我正确理解了你的问题。它不会错过这个任务,对吗? - jin
排程每15分钟生成一次,仅适用于近期任务。最后需要注意的是:我记得曾经与错误的时区进行斗争(当我在UTC+2中输入cron表达式时,Magento处理的是UTC或类似的时区...)。 - Jscti

1
我知道这已经过时了,但是如果我遇到类似的情况,它仍然可能是相关的。您的cron.sh在服务器上每隔多长时间运行一次?如果调度程序设置为每60分钟并且在整点(12pm、1pm、2pm等)运行,并且您的Magento cron表达式例如是30 * * * *,即每小时半小时运行一次,则您的作业将永远不会运行。因为您的cron.sh只会提前20分钟设置Magento cron作业,所以12:30的作业将无法安排,但由于Magento的cron.sh设置为在整点运行,因此它永远不会被安排。 我怀疑您最初的问题是类似的,因为将“预定提前”时间调整到Magento cron应该被安排的时间之后,可以解决此类问题。 这也是需要注意的事项。

1
我已经按照以下方式定义了corn job。 03 16 * * *
当您的cron.php在16:02运行时,它只会在数据库表cron_schedule中创建有关此cron job的条目,并且不会运行cron job。要运行此cron job,我需要运行cron.php两次,也就是说,在表中创建条目后,您应该在15分钟内运行cron,否则该条目将被忽略。因此,为了运行cron job,您应该定期运行cron.php。
我的cron job每天在16:03运行,而我每隔10分钟运行一次cron.php。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接