自定义crons引用
本主题可帮助您为自定义模块设置crontab和(可选)cron组。 如果您的自定义模块需要定期计划任务,则必须为该模块设置crontab。 crontab 是cron作业配置。
(可选)您可以设置自定义组,该组允许您独立于其他cron作业运行在该组中定义的cron作业。
有关分步教程,请参阅配置自定义cron作业和cron组(教程)。
有关cron作业的概述,请参阅配置cron作业。
配置cron组
本节讨论如何为自定义模块选择性地创建cron组。 如果您不需要执行此操作,请继续下一部分。
cron组 是一个逻辑组,可让您一次轻松运行多个进程的cron。 大多数Commerce模块使用default
cron组;某些模块使用index
组。
如果您正在为自定义模块实施cron,则可以选择使用default
组或其他组。
要为模块配置cron组:
在模块目录中创建crontab.xml
文件:
<your component base dir>/<vendorname>/module-<name>/etc/crontab.xml
对于一个组,该文件应具有以下内容:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
<group id="<group_name>">
<job name="<job_name>" instance="<classpath>" method="<method>">
<schedule><time></schedule>
</job>
</group>
</config>
其中:
group_name
job_name
classpath
method
classpath
中要调用的方法。time
生成的包含两个组的crontab.xml
可能如下所示:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
<group id="default">
<job name="<job_1_name>" instance="<classpath>" method="<method_name>">
<schedule>* * * * *</schedule>
</job>
<job name="<job_2_name>" instance="<classpath>" method="<method_name>">
<schedule>* * * * *</schedule>
</job>
</group>
<group id="index">
<job name="<job_3_name>" instance="<classpath>" method="<method_name>">
<schedule>* * * * *</schedule>
</job>
<job name="<job_4_name>" instance="<classpath>" method="<method_name>">
<schedule>* * * * *</schedule>
</job>
</group>
</config>
例如,请参阅Magento_客户crontab.xml。
指定Cron组选项
您可以通过位于以下位置的cron_groups.xml
文件声明新组并指定其配置选项(所有选项都在存储视图范围中运行):
<your component base dir>/<vendorname>/module-<name>/etc/cron_groups.xml
以下是cron_groups.xml
文件的一个示例:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/cron_groups.xsd">
<group id="<group_name>">
<schedule_generate_every>1</schedule_generate_every>
<schedule_ahead_for>4</schedule_ahead_for>
<schedule_lifetime>2</schedule_lifetime>
<history_cleanup_every>10</history_cleanup_every>
<history_success_lifetime>60</history_success_lifetime>
<history_failure_lifetime>600</history_failure_lifetime>
<use_separate_process>1</use_separate_process>
</group>
</config>
其中:
schedule_generate_every
cron_schedule
表的频率(以分钟为单位)。schedule_ahead_for
cron_schedule
表之前的时间(以分钟为单位)。schedule_lifetime
history_cleanup_every
history_success_lifetime
history_failure_lifetime
use_separate_process
禁用cron作业
Cron作业没有我们为观察者提供的disable
功能。 但是,可以使用以下技术禁用cron作业: schedule
一次包含永远不会发生的日期的时间。
例如,禁用在Magento_Customer
模块中定义的visitor_clean
cron作业:
...
<group id="default">
<job name="visitor_clean" instance="Magento\Customer\Model\Visitor" method="clean">
<schedule>0 0 * * *</schedule>
</job>
</group>
...
要禁用visitor_clean
cron作业,请创建一个自定义模块并重写visitor_clean
cron作业schedule
:
...
<group id="default">
<job name="visitor_clean" instance="Magento\Customer\Model\Visitor" method="clean">
<schedule>0 0 30 2 *</schedule>
</job>
</group>
...
现在,visitor_clean
cron作业已设置为在2月30日00:00运行 — 该日期永远不会发生。