剖析Magento Cron系统

Magento有一个非常整洁的cron系统,使开发人员可以按定义的时间间隔运行计划的作业,就像大多数Unix系统上的cron服务一样。我在两年多以前写了一篇文章,内容涉及如何使用Magento cron,但是在这篇文章中,我探讨了服务背后的机制。

cron作为Magento模块,是如何使用Magento进行操作的简单示例,这就是为什么我认为它使它成为值得研究的有趣服务的原因。

全部踢开

我们在操作系统的crontab中添加了一个条目,以处理Magento的crontab,例如:*/5 * * * * www-data /usr/bin/php /var/www/magento/cron.php。我们通常每5分钟启动一次活动,这对于任何一家商店来说都是足够的。

Crontab作为事件

Magento大量使用Event-Observer模式,以允许模块在正常程序执行过程中挂接到关键点或事件。cron服务通过在文件cron.php中定义一个称为crontab的新事件来利用这一点。这使得实际的cron.php脚本非常简洁(实际上只有8行)并且易于扩展,因此,如果另一个模块需要挂接到cron.php脚本的原始加载中,则可以通过此操作同一事件。

基于XML的Cron条目

希望使用cron的模块不会直接挂接到此crontab事件中,否则,它们将在每次我们访问cron.php时都触发其事件,请记住我们现在每5分钟运行一次,否则必须管理自己的抑制参数,例如确保它们仅每天或每3小时运行一次,等等。

相反,他们定义了config.xml(在此进行讨论),用于描述要运行的模型和方法的条目,以及用于定义方法执行频率的标准cron表达式。

管理时间表

默认情况下,在激发crontab事件时执行的方法cron/observer::dispatch将处理各种config.xml文件中定义的作业的计划和执行。调度功能负责:

  • 时间表创建
  • 计划清理
  • 计划执行

Magento将config.xml转换为数据库中的挂起作业。一旦满足条件,即所需的执行时间现在或过去,并且没有错过最后期限,该作业将被执行,其状态将更新为完成。

Cron实例很容易耗时超过5分钟,而在我们的设置中,这将导致对cron.php脚本的另一次调用。为了避免重复运行,启动作业后,Magento会锁定该作业。

就是这样。一个非常简洁的模块,大部分繁重的工作都由处理cron表达式解析的cron / schedule模型完成。一个很好地使用事件观察器,自定义config.xml条目和数据库资源的模块的完美示例。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论