Crons プロパティ

Adobe Commerceはcrons プロパティを使用して、繰り返し作業をスケジュールします。 特定のタスクを特定の時間帯に実行するようにスケジュールを設定するのに最適です。 読み取り専用の環境の性質により、Adobe Commerce on cloud infrastructure プロジェクトのweb インスタンスで一度に1つのcron ジョブのみを実行できます。 長時間実行しているタスクを、キューに登録されている小さなタスクに分割することをお勧めします。 または、​ ワーカーインスタンス ​を構築することもできます。

Adobeでは、crons​ ファイルシステム所有者として実行することをお勧めします。 not​は、cronsrootとして、またはweb サーバーユーザーとして実行します。

この設定は、複数のデフォルトのcron ジョブを持つAdobe Commerceのオンプレミスのデプロイメントとは異なります。 設定ガイド​の「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では、ステージング環境と実稼動環境でセルフサービス crons設定をサポートするために、Pro プロジェクトにのみ自動クローン設定オプションが追加されました。 このオプションが有効になっている場合は、crontabを使用してcron設定を確認できます。 これは、スタータープロジェクトで利用できる​ not ​です。

crontabを使用してPro プロジェクトの設定を確認できますが、Adobe Commerceでは、クラウド インフラストラクチャにデプロイされたサイトのcron ジョブの実行にcrontabを使用しません。

Pro環境でのcron設定を確認するには:

  1. SSHを使用してリモート環境にログインします。

  2. スケジュールされたcron プロセスのリストを表示します。

    code language-shell
    crontab -l
    
    note
    NOTE
    crontab -l コマンドでCommand not found エラーが返された場合(Pro ステージング環境および実稼動環境のみ)、Adobe Commerce サポートチケット ​を送信して、プロジェクトで自動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分に1回です。 Pro ステージング環境および実稼動環境の場合、最小間隔は1分あたり1回です。 Adobe Commerce クラウド インフラストラクチャでは、crons セクションの.magento.app.yaml ファイルにカスタム cron ジョブを追加します。 スケジュール設定の一般的な形式はspecで、実行するコマンドまたはカスタムスクリプトを指定する形式はcmdです。

仕様

Adobe Commerceは、crons仕様(仕様)に5値式を使用しています:* * * * *

  1. Minute (0 ~ 59)すべてのStarterおよびPro環境で、cron ジョブでサポートされる最小頻度は5分です。 管理者の設定が必要な場合があります。
  2. 時間(0 ~ 23)
  3. 月の日(1 ~ 31)
  4. 月(1 ~ 12)
  5. 曜日(0~6)(日曜日~土曜日、7は一部のシステムでは日曜日)

一部の例:

  • 00 */3 * * *は、最初の1分(午前12:00、午前3:00、午前6:00)に3時間ごとに実行されます
  • 20 */8 * * *は20分(午前12:20、午前8:20、午後4:20)に8時間ごとに実行されます
  • 00 00 * * *が1日1回、午前0時に実行されます
  • 00 * * * 1は週1回、月曜日の午前0時に実行されます。
NOTE
.magento.app.yaml ファイルで指定されたcrons時間は、データベースのストア設定値で指定されたタイムゾーンではなく、サーバーのタイムゾーンに基づいています。

スケジュールを決定する際には、タスクを完了するのにかかる時間を考慮します。 例えば、3時間ごとにジョブを実行し、タスクの完了に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 on cloud infrastructure platformでは、.magento.app.yaml ファイルのcrons セクションにカスタマイズを追加できます。

NOTE
スターター環境とPro integration環境の場合、最小間隔は5分に1回です。 Pro ステージング環境および実稼動環境の場合、最小間隔は1分あたり1回です。 デフォルトの最小値より多くの頻度を設定することはできません。

Adobe Commerce Pro プロジェクトでは、.magento.app.yaml ファイルを使用してステージング環境と実稼動環境にカスタム cron ジョブを追加する前に、自動cron機能をプロジェクトで有効にする必要があります。 この機能が有効になっていない場合は、Adobe Commerce サポートチケット ​を送信して自動実行を有効にします。

カスタム cron ジョブを追加するには:

  1. ローカル開発環境で、Adobe Commerce /app ディレクトリの.magento.app.yaml ファイルを編集します。

  2. crons」セクションで、次の形式を使用してカスタマイズを追加します。

    code language-yaml
    crons:
        <cron_name_1>:
            spec: "<schedule_time>"
            cmd: "<schedule_command>"
        <cron_name_2>:
            spec: "<schedule_time>"
            cmd: "<schedule_command>"
    

    次の例では、productcatalog ジョブは、8時間ごとに、1時間後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'
    
  3. コードの変更を追加、コミット、プッシュします。

    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 ジョブを無効にするには:

  1. ローカル ワークステーションで、プロジェクト ディレクトリに移動します。

  2. SSHを使用してリモート環境にログインします。

    code language-bash
    magento-cloud ssh
    
  3. cron ジョブを無効にし、アクティブなcron プロセスを停止します。

    code language-shell
    ./vendor/bin/ece-tools cron:disable
    
  4. 必要なメンテナンスタスクを完了したら、cron ジョブを再度有効にします。

    code language-shell
    ./vendor/bin/ece-tools cron:enable
    

cron ジョブのトラブルシューティング

Adobeは、Adobe Commerce on cloud infrastructure パッケージを更新し、Adobe Commerce on cloud infrastructure プラットフォームでのcron処理を最適化し、cron関連の問題を修正しました。 cron処理で問題が発生した場合は、プロジェクトで最新バージョンのece-tools パッケージが使用されていることを確認してください。 ECE-Toolsの更新を参照してください。

cron処理情報は、各環境のアプリケーションレベルのログファイルで確認できます。 ​ アプリケーションログ ​を参照してください。

cron関連の問題のトラブルシューティングについては、次のAdobe Commerce サポート記事を参照してください。

recommendation-more-help
commerce-on-cloud-help-cloud-guide