自動 Cron タスクの概要
cron の設定はウェブサイトを構築する上で重要なステップであり、検索インデックスの作成、コアやモジュールの更新確認、一時ファイルの削除など、サイトのリソースを維持するのに役立ちます。
適切に設定された cron ジョブは、多くのタスクを管理します:
- Search(検索) モジュールが使用するサイトコンテンツのインデックスを更新します。
- Aggregator(アグリゲーター) モジュールによって更新されるキューにデータを供給します。
- Update Manager(更新マネージャー) モジュールを使って利用可能な更新を確認します。
- System(システム) モジュールによって処理される、古いログエントリの削除などの定期的なメンテナンスタスクを実行します。
cron とは?
cron は、指定した間隔でコマンドを実行するデーモンです。これらのコマンドは「cron ジョブ」と呼ばれます。cron は Unix、Linux、Mac のサーバーで利用できます。Windows サーバーでは、コマンドを実行するために Scheduled Tasks(タスクスケジューラ) を使用します。cron ジョブは時刻でトリガーされるアクションで、通常は(そして最も効率的には)ホスティングサーバーによって実行されますが、リモートサーバーや、さらにはローカルマシンからトリガーすることもできます。
起こることとしては、cron ジョブが、たとえば http://www.example.com/cron.php?cron_key=0MgWtfB33FYbbQ5UAC3L0LL3RC0PT3RNUBZILLA0Nf1Re のような、サイト上の cron.php ファイルにアクセスします。cron.php の正確な URL は、管理 > レポート > ステータスレポート(admin/reports/status)のステータスレポートにある「Cron Maintenance Tasks(Cron メンテナンスタスク)」セクションで確認できます。
cron を有効にする
最も簡単な方法は、組み込みの「Automated Cron(自動 Cron)」システムを使って Drupal に処理を任せることです(デフォルトでそうなっています)。Automated Cron は、管理 > 設定 > システム > Cron(admin/config/system/cron)で管理できます。デフォルトの頻度は 3 時間ごとです。これにより、cron はユーザーのリクエスト中に、3 時間に 1 回を超えない頻度で実行されます。トラフィックの少ないサイトでは、それでも cron ジョブを作成する方が有益な場合があることに注意してください。Automated Cron を無効にするには、「Run cron every(cron を実行する間隔)」を「Never(実行しない)」に設定します。
自動 cron システムはシステムの cron デーモンを使用しないため、すべての環境で動作します。代わりに、Drupal は各リクエストの最後に cron が最後に実行された時刻を確認し、時間が経ちすぎている場合は、そのリクエストの一部として cron タスクを実行します。欠点は 2 つあります:(1) cron タスクは Drupal がリクエストを処理するときにのみ実行されること、(2) cron 実行のリソース負荷がユーザーのリクエストに加わり、複雑なサイトではそのリクエストが遅くなったり、メモリ制限を超えたりする可能性があることです。
2 つ目の方法(どの Drupal バージョンにも適用可能)は、cron ジョブを作成する か、EasyCron や Cronless のようなサードパーティの cron サービスなど、cron を実行する別の外部手段を使うことです。この方法はより信頼性が高く(常にスケジュールどおりに実行されるため)、リソースの消費も少なくなります(cron 処理がページリクエストに加わらないため)。可能であれば、これが一般に cron を実行する好ましい方法です。外部 cron ジョブを設定した場合は、Drupal の組み込み cron システムを完全に無効にできることに注意してください。
Automated Cron を無効にする
パフォーマンス上の理由から、あるいは cron を外部トリガーからのみ実行したい場合は、自動 cron システムを無効にしたいこともあるでしょう。
これは、管理 > 設定 > システム > Cron(admin/config/system/cron)で「Run cron every(cron を実行する間隔)」を「Never(実行しない)」に設定することで行えます。
Drupal 8 で cron を無効にするもう一つの方法は、settings.php ファイルに次の行を追加することです:
$config['automated_cron.settings']['interval'] = 0;
これは実質的に admin/config/system/cron を「Never(実行しない)」に設定し、管理ユーザーによって上書きされるのを防ぎます。