Cron リファレンスのカスタマイズ

このトピックは、カスタムモジュールの 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

1 つのグループの場合、ファイルには次の内容が含まれている必要があります。

<?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 グループの名前。 グループ名は一意である必要はありません。 一度に 1 つのグループに対して cron を実行できます。
job_name
この Cron ジョブの一意の ID。
classpath
インスタンス化するクラス (クラスパス)。
method
呼び出 classpath メソッド。
time
cron 形式でスケジュールします。 スケジュールがCommerce データベースまたは他のストレージで定義されている場合は、このパラメーターを省略します。

2 つのグループを持つ結果の 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例として、Customer_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 発生することのない日付を含む時間を無効にします。

例えば、モジュールで定義した visitor_clean cron ジョブ Magento_Customer 無効にします。

...
<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