自定义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
cron组的名称。 组名称不必是唯一的。 您可以一次为一个组运行cron。
job_name
此cron作业的唯一ID。
classpath
要实例化的类(类路径)。
method
classpath中要调用的方法。
time
以cron格式计划。 如果在Commerce数据库或其他存储中定义了计划,请忽略此参数。

生成的包含两个组的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
cron作业必须启动或认为cron作业已错过的时间(以分钟为单位)(“太晚”而无法运行)。
history_cleanup_every
cron历史记录保留在数据库中的时间(以分钟为单位)。
history_success_lifetime
成功完成的cron作业的记录保留在数据库中的时间(分钟)。
history_failure_lifetime
失败的cron作业记录保留在数据库中的时间(以分钟为单位)。
use_separate_process
在单独的php进程中运行此cron组的作业

禁用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运行 — 该日期永远不会发生。

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c