magemojo/m2-ce-cron

用于替换 Magento 2 Cron 功能的包

安装次数: 289 173

依赖项: 0

建议者: 0

安全: 0

星级: 165

关注者: 24

分支: 45

开放性问题: 22

类型:magento2-module

1.4.3-stable 2022-12-13 20:04 UTC

README

MageMojo

Cron

本模块为 Magento 2 覆盖了基本的 cron 功能,修复了已知错误,并提供了 cron 服务模型以控制 cron 进程执行。

Version 1.4.2

注意:版本 1.3x 仅支持 Magento 2.3 及以上版本。较旧的 Magento 2 版本使用模块版本 1.2。

默认的 cron 可能会重叠并填充 cron_schedule 表,导致每个 cron 间隔运行的工作任务数量呈指数级增长,最终 cron 持续运行而不会完成。大量的 cron 任务也可能导致托管 Magento 2 的服务器崩溃。

本模块通过接受作业的服务替换了 cron 管理。随着作业的调度,它们将由该服务执行。如果作业已经在运行,并且另一个具有相同作业代码的作业被拾取,则新的作业将被标记为错过。防止重复作业运行,从而减少服务器开销。

将默认的 cron 视为一个突然出现并运行任意数量任务的工厂。如果这些任务在下一个 cron 间隔之前没有完成,它们将继续处理,但另一个工厂会自发地出现并运行另一组任务,这些任务可能与原始工厂重叠。

该模块通过具有单个源服务来处理作业,以适当的顺序执行作业而不重复,消除了重叠作业的可能性。有一个工厂一直在工作,以确保您的作业完成。

除了服务模型之外,还进行了许多其他改进。例如,对更新语句中的左连接进行了重写,该语句强制对 cron_schedule 的历史记录进行全表扫描。语句会锁定,因为它正在从它尝试更新的同一表中读取。

在版本 1.1 中,向管理员添加了 Cron 报告,以显示作业代码统计信息和 cron 运行错误列表。

在版本 1.2.5 中,即使在维护模式下,如果有豁免的 IP,Cron 执行也将运行,允许进行完全内部验证,包括必要的 cron。

在版本 1.3 中,为 consumers_runner cron 作业实现了修复。此作业代码是来自 Magento 1 的遗留下来的代码,在 Magento 2.3 中使用得更为频繁。它在自己的调度程序下运行,可以执行许多子作业并使系统崩溃。在此模块的此版本中,此父作业被拦截并写入 cron_schedule 表中的单个作业,然后以合理的方式从中运行。这些消费者作业也可能进入无限循环,因此默认情况下对它们施加了 30 秒的超时。此设置可以在管理员中调整。

在版本 1.3.7 中添加了 consumers governor,以终止空闲的消费者作业。这些作业中的错误否则会阻止这些作业完成。

在版本 1.4.2 中添加了对集群的支持,并修复了尊重已禁用消费者作业的问题。

在版本 1.4.3 中添加了对 PHP 8.1 的支持。

贡献

请参阅CONTRIBUTING.md

好处

  • 加快 cron 执行速度。

  • 停止数据库锁定。

  • 防止 cron 历史记录爆炸。

  • 停止 cron 进程相互占用。

  • 在系统处于可配置负载条件下时停止 cron 运行。

  • 设置最大同时 cron 进程数。

  • 设置历史记录数量。

管理员选项

启用 Cron - 开启或关闭 cron。

集群支持 - 必需,用于 Magento Commerce Cloud 或任何可扩展/集群环境。如果有多个应用服务器可能执行 cron:run 命令,请启用此功能。这将允许服务在需要时平滑地在“领导者”服务器之间切换。

最大 Cron 进程数 - 并行运行的 cron 线程数。此选项是所有定义任务的和。例如:如果您有 5 个任务设置为午夜运行,最大 Cron 进程数设置为 1,则只有 1 个任务将依次执行,直到所有 5 个任务完成。默认 3。

PHP 二进制名称/路径 - 您在 shell 中运行的 php 二进制名称。通常是 php 或 php70。您可以可选地包括二进制的完整路径。默认 php。您还可以在此处添加行内选项,例如 php -dmemory_limit=8096M,如果您想设置自定义的 ini 值。

最大负载平均 - 由 php 函数 sys.getloadavg() / CPU 核心数定义。sys.getloadavg() 函数报告每个正在使用的核心 1.0,就像 top 中报告的平均负载一样。CPU 核心数从 /proc/cpuinfo 中获取,平均负载除以这个数。例如:如果您有 8 个核心并且您正在使用 6 个,则此值返回为 0.75。如果您的最大负载平均为 0.76,则 cron 不会运行。当您的平均负载下降到 0.74 时,cron 将运行。任何预定运行但未运行的计划任务将被运行。如果同一计划任务多次错过,则将运行最近的作业,其余的将被标记为错过。默认值为 0.75(您可用 CPU 的 75%)。

历史保留 - 在 cron_schedule 表中保留历史记录的天数。默认 1(1 天)。

消费者作业超时 - 允许消费者作业运行的时间(秒)。在某些条件下,这些作业可能无限期地运行。

导出器作业超时 - 允许 exportProcessor 作业运行的时间(秒)。默认 3600 秒。

消费者限制器: - 许多消费者进程中的错误导致它们无限期地运行。消费者限制器将检测这些状态并终止进程。

Composer 安装

  • 在您的终端中运行以下命令

  • 对于 Magento 版本 2.3 及以上

composer require magemojo/m2-ce-cron
  • 否则
composer require magemojo/m2-ce-cron:1.2.9
  • 然后运行以下命令
php bin/magento module:enable MageMojo_Cron
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy

许可

License: MIT