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
进程。
解决方案
-
联系Adobe Commerce支持以启用自托管crons。
-
编辑Git分支中Adobe Commerce代码的根目录中的
.magento.app.yaml
文件。 添加以下内容:code language-yaml crons: cronrun: spec: "* * * * *" cmd: "php bin/magento cron:run"
-
保存文件并将更新推送到暂存环境和生产环境(与对集成环境执行此操作的方式相同)。
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的命令不适用于入门计划和开发/集成环境。
8bd06ef0-b3d5-4137-b74e-d7b00485808a