Crons属性
Adobe Commerce使用crons
属性来计划重复活动。 它非常适合安排在一天中的特定时间运行特定任务。 由于只读环境的性质,在云基础架构项目上的Adobe Commerce的Web实例上,一次只能运行一个cron作业。 最佳做法是将长时间运行的任务划分为较小的排队任务。 或者,您可以构建辅助实例。
Adobe建议您以文件系统所有者的身份运行crons
。 请 不要 以root
或Web服务器用户的身份运行crons
。
此配置不同于Adobe Commerce的内部部署,后者有多个默认cron作业。 请参阅 配置指南 中的配置cron作业。
设置cron作业
crons
属性描述按计划触发的进程。 每个作业都需要一个名称和以下选项:
spec
— 用于计划的cron表达式。cmd
— 要在start
和stop
上运行的命令。shutdown_timeout
— (可选)如果取消了cron作业,这是发送SIGKILL信号以停止该作业或进程之前的秒数。 默认值为10秒。timeout
— (可选) cron作业在超时之前可以运行的最长时间。 默认为允许的最大值86400秒(24小时)。
默认情况下,每个Commerce云项目在.magento.app.yaml
文件中都有以下默认crons
配置:
crons:
cronrun:
spec: "* * * * *"
cmd: "php bin/magento cron:run"
如果您的项目需要自定义cron作业,则可以将其添加到默认crons
配置。 请参阅生成cron作业。
crontab
Adobe Commerce仅向Pro项目添加了auto-crons配置选项,以支持暂存和生产环境中的自助crons
配置。 如果启用此选项,则可以使用crontab
查看cron配置。 这是 不 可用于入门项目。
尽管您可以使用crontab
查看Pro项目上的配置,但Adobe Commerce不使用crontab
为部署在云基础架构上的站点运行cron作业。
要在Pro环境中查看cron配置,请执行以下操作:
-
使用SSH登录到远程环境。
-
列出计划的cron进程。
code language-shell crontab -l
note note NOTE 如果 crontab -l
命令返回Command not found
错误(仅在Pro暂存和生产环境中),您必须提交Adobe Commerce支持票证以在您的项目上启用auto-crons自助服务配置选项。
以下示例显示仅具有默认crons
配置的环境的crontab
输出:
username@hostname:~$ crontab -l
# Crontab is managed by the system, attempts to edit it directly will fail.
SHELL=/etc/platform/6fck2obu3244c/cron-run
MAILTO=""
# m h dom mon dow job_name
* * * * * cronrun
构建cron作业
cron作业包括计划和时间规格以及在计划时间运行的命令。 对于入门环境和Pro integration
环境,最小间隔为每5分钟一次。 对于Pro暂存环境和生产环境,最小间隔为每分钟一次。 在云基础架构上的Adobe Commerce上,将自定义cron作业添加到crons
部分中的.magento.app.yaml
文件。 常规格式为spec
用于计划,为cmd
用于指定要运行的命令或自定义脚本。
规范
Adobe Commerce为crons
规范(规范)使用五值表达式: * * * * *
- 分钟(0到59)对于所有Starter和Pro环境,cron作业支持的最低频率为五分钟。 您可能需要在管理员中配置设置。
- 小时(0到23)
- 日期(1到31)
- 月(1至12)
- 每周时间(0到6)(星期日到星期六;某些系统上的星期日也是7)
一些示例:
00 */3 * * *
每三小时在第一分钟运行一次(12:00 am、3:00 am、6:00 am)20 */8 * * *
在分钟20每8小时运行一次(上午12:20,上午8:20,下午4:20)00 00 * * *
每天午夜运行一次00 * * * 1
在星期一午夜每周运行一次。
.magento.app.yaml
文件中指定的crons
时间基于服务器时区,而不是在数据库的存储配置值中指定的时区。在确定计划时,请考虑完成任务所需的时间。 例如,如果您每三小时运行一次作业,并且任务需要40分钟才能完成,则可以考虑更改计划时间。
命令
cmd
指定要运行的命令或自定义脚本。 命令脚本格式可以包括以下内容:
<path-to-php-binary> <project-dir>/<script-command>
例如:
crons:
spec: "00 */8 * * *"
cmd: "/usr/bin/php /app/abc123edf890/bin/magento export:start catalog_category_product"
在此示例中,<path-to-php-binary>
是/usr/bin/php
。 包括项目ID的安装目录为/app/abc123edf890/bin/magento
,脚本操作为export:start catalog_category_product
。
将自定义cron作业添加到您的项目
在云基础架构平台上的Adobe Commerce上,您可以将自定义项添加到.magento.app.yaml
文件的crons
部分。
integration
环境,最小间隔为每5分钟一次。 对于Pro暂存环境和生产环境,最小间隔为每分钟一次。 您不能配置比默认最小值更频繁的间隔。在Adobe Commerce Pro项目中,必须先在项目上启用自动cron功能,然后才能使用.magento.app.yaml
文件将自定义cron作业添加到暂存环境和生产环境。 如果未启用此功能,请提交Adobe Commerce支持票证以启用自动登录。
要添加自定义cron作业:
-
在本地开发环境中,编辑Adobe Commerce
/app
目录中的.magento.app.yaml
文件。 -
在
crons
部分中,使用以下格式添加自定义项:code language-yaml crons: <cron_name_1>: spec: "<schedule_time>" cmd: "<schedule_command>" <cron_name_2>: spec: "<schedule_time>" cmd: "<schedule_command>"
在以下示例中,
productcatalog
作业每八小时导出一次产品目录,即该小时后的20分钟。code language-yaml crons: magento: spec: '* * * * *' cmd: 'php bin/magento cron:run' productcatalog: spec: '20 */8 * * *' cmd: 'bin/magento export:start catalog_product_category'
-
添加、提交和推送代码更改。
code language-bash git add .magento.app.yaml && git commit -m "cron config updates" && git push origin <branch-name>
更新cron作业
要添加、删除或更新自定义作业,请在.magento.app.yaml
文件的crons
部分中更改配置。 然后,在将更改推送到暂存环境和生产环境之前,在远程integration
环境中测试更新。
禁用cron作业
您可以在完成维护任务(如重新索引或清除缓存)之前手动禁用cron作业,以防止出现性能问题。 您可以使用ece-tools
CLI命令cron:disable
禁用所有cron作业并停止任何活动的cron进程。
要禁用cron作业:
-
在本地工作站上,转到您的项目目录。
-
使用SSH登录到远程环境。
code language-bash magento-cloud ssh
-
禁用cron作业并停止活动cron进程。
code language-shell ./vendor/bin/ece-tools cron:disable
-
完成任何必需的维护任务后,请确保再次启用cron作业。
code language-shell ./vendor/bin/ece-tools cron:enable
cron作业疑难解答
Adobe更新了Adobe Commerce on cloud基础架构包,以优化Adobe Commerce on cloud基础架构平台的cron处理并修复与cron相关的问题。 如果您遇到cron处理问题,请确保您的项目使用的是ece-tools
包的最新版本。 请参阅更新ECE-Tools。
您可以在每个环境的应用程序级日志文件中查看cron处理信息。 查看应用程序日志。
请参阅以下Adobe Commerce支持文章,以获取有关排查cron相关问题的帮助: