Cron任务从其他组锁定任务

本文为Adobe Commerce提供了一个解决云基础架构问题的解决方案,该问题与阻止其他cron作业的某些长期cron作业相关。

受影响的产品和版本

  • Adobe Commerce on cloud infrastructure Pro计划架构
  • 2019年5月之前入门

问题

在Adobe Commerce for cloud上,当您具有复杂的cron任务(长期任务)时,它们可能会锁定其他任务以供执行。 例如,索引器的任务重新索引失效的索引器。 它可能需要几个小时才能完成,并且会锁定其他默认cron作业,例如发送电子邮件、生成站点地图、客户通知和其他自定义任务。

症状

未执行cron作业执行的进程。 例如,产品更新不适用于小时,或者客户报告未收到电子邮件。

打开cron_schedule数据库表时,您会看到状态为missed的作业。

原因

以前,在我们的云环境中,Jenkins服务器用于运行cron作业。 Jenkins一次只能运行一个作业实例;因此,一次只能运行一个bin/magento cron:run进程。

解决方案

  1. 联系Adobe Commerce支持以启用自托管crons。

  2. 编辑Git分支中Adobe Commerce代码的根目录中的.magento.app.yaml文件。 添加以下内容:

    code language-yaml
      crons:
      cronrun:
      spec: "* * * * *"
      cmd: "php bin/magento cron:run"
    
  3. 保存文件并将更新推送到暂存环境和生产环境(与对集成环境执行此操作的方式相同)。

NOTE
无需将存在多个cron:run的旧cron配置传输到新cron计划;如上所述添加的常规cron:run任务已经足够。 但是,如果您有任何自定义作业,则需要转移这些作业。

检查您是否启用了自管理cron(仅用于Cloud Pro暂存和生产环境)

要检查自管理cron是否已启用,请运行crontab -l命令并观察结果:

  • 如果您能够看到类似以下的任务,则启用自托管cron:

    code language-bash
    username@hostname:~$ crontab -l    # Crontab is managed by the system, attempts to edit it directly will fail.
    SHELL=/etc/platform/username/cron-run    MAILTO=""    # m h dom mon dow job_name    * * * * * cronrun
    
  • 如果您无法看到任务并收到​ “不允许使用此程序” ​错误消息,则未启用自托管cron。

NOTE
上述检查是否已启用自管理cron的命令不适用于入门计划和开发/集成环境。

相关阅读

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a