concrete5 では、sitemap.xml 生成、検索インデックスの作成、古いページバージョンの削除など、バッチ処理を行う場合「自動実行ジョブ」(Automated Job) を設定・実行します。
この記事で、自動実行ジョブの仕組みと設計の基礎を紹介します。
※ concrete5 8.5.4 時点の情報です。
1. concrete5 標準ジョブ一覧
[管理画面] - [システムと設定] - [自動実行ジョブ] よりジョブの一覧を見ることができます。
【concrete5サイトURL】/index.php/dashboard/system/optimization/jobs
まずは標準のジョブの機能を紹介し、どのジョブをなぜ実行したほうが良いかを解説します。
ジョブ名 | キュー | デフォルト ジョブセット |
説明 |
---|---|---|---|
検索エンジンインデックス(更新) | 有り | ○ | 更新されたページの索引インデックスを生成する |
検索エンジンインデックス(すべて) | 有り | すべてのページの索引インデックスを生成する | |
自動化されたグループの確認 | 有り | 各グループの中の設定で「自動化」で設定された処理を行う | |
sitemap.xmlファイルを生成する | 無し | ○ | sitemap.xml ファイルを生成する |
メール投稿を処理 | 無し | ○ | 受信メール対応アプリの処理を行う |
古いページバージョンを削除 | 無し | ○ | 3ページずつ、10パージョン以上の古いバージョン履歴を削除する |
ギャザリングを更新 | 無し | ○ | 今は使われていない機能ギャザリングのデータ更新用ジョブ |
統計トラッカー更新 | 無し | ファイルの使用先などの統計情報を処理 | |
サムネイルデータベースの再生成 | 有り | ○ | 画像ファイルのサムネイル情報の処理 |
ユーザーを無効化 | 無し | ○ | 「ユーザー無効化設定」ページでのユーザー」自動無効化の処理を行う |
1-1. どのジョブを実行する必要があるの?
ざっくり説明すると、標準的な concrete5 で定期的に実行をする必要があると思われるジョブは下記の4つです。
- 検索エンジンインデックス(更新)
- sitemap.xmlファイルを生成する
- 統計トラッカー更新
- サムネイルデータベースの再生成
サイトの仕様によって実行の要否や実行間隔が変わります。
1-2. 実行する必要があると思われるデフォルトジョブの解説
独断と偏見で、「これは定期的に実行したほうが良いでしょう」と思っているデフォルトジョブとそのジョブの内容の解説です。
「検索エンジンインデックス(更新)」は、ページリストや検索ブロックで、ファイル、ユーザー、Express など利用されています。例えば、既存ページの説明や属性情報が更新された際は索引インデックスが更新されない時があります。その時にこのジョブを実行し索引インデックスを更新する必要があります。
「sitemap.xmlファイルを生成する」は、Google Search Console 等にサイトマップを送信するための sitemap.xml を生成するジョブです。自動実行ジョブを定期的に実行しないと、sitemap.xml が最新のものになりません。
「統計トラッカー更新」は、ファイルマネージャーのファイルの中の統計情報を収集ジョブです。ジョブを実行後、ファイルマネージャー内の各ファイルをクリックしポップアップメニューにでてくる「ファイル使用状況」というメニューをクリックします。そのファイルがどのページで使用されているかを見ることができるようになります。
「サムネイルデータベースの再生成」はファイルマネージャー内の画像のサムネイルを生成します。画像を「置き換え」などで更新したり、新しいサムネイルタイプを追加した場合などに実行が必要です。
1-3. その他のデフォルトジョブの解説
以下の concrete5 デフォルトジョブはサイトの特性において実行の要否を決めればよいかと思います。
「古いページバージョンを削除」ジョブは、ページバージョン履歴が大きくなると、データベースの容量や若干のパフォーマンスに影響が出てくるので、節約したいサイトで実行します。ただし1回の実行で3ページ分しか処理しないので全ページで実行するのに要する回数は計算してください。
「メール投稿を処理」は関係するアドオンを利用しているのであれば、実行しないとメールサーバーからメールを取得しません。標準では受信メールを使ったアプリは有りません。 ( concrete5.org コミュニティフォーラムでは、この機能を使って、フォーラムの通知メールに返信をするだけでフォーラムにコメントが付けられる機能があり、それに使われていました。)
「自動化されたグループの確認」「ユーザーを無効化」ジョブはそれらの設定をしているのであれば実行が必要です。
「自動化されたグループの確認」は [管理画面] - [メンバー] - [ユーザーグループ] で各グループの「グループを編集」ページにある「自動的にこのグループに追加する」で 「自動化されたグループの確認」ジョブが実行された時
にチェックがされたグループが追加されます。
「ユーザーを無効化」は、[管理画面] - [システムと設定] - [ログインとユーザー登録] - [ユーザー無効化設定]で、「しばらくログインしていないユーザーを自動的に無効化します」という機能を有効にした際に実行する必要があります。
2. ジョブ設定の基本
2-1. 実行するジョブの選定と実行時間&間隔を決める
定期的に実行するジョブと、実行する間隔を設定しましょう。
まずは、毎日の朝4〜6時の間で順番に実行するように設定するという基本から考えたら良いと思います。
(補足:急いで実行したい時は [管理画面] - [システムと設定] - [最適化] - [自動実行ジョブ] の一覧から「再生」ボタンを押すことで、ブラウザ上で一気に実行することができます。)
2-2. ジョブの実行方法を決める
ジョブをどう実行するか決めます。自分が使っているサーバーの種類や設定可能な方法で決めていきます。
ジョブの実行方法には5つの方法があります。
(最初にこれを覚えて頂く必要はありません。残りの記事を全部読んでから、下記のどの方法にするか考えてください。)
- 1. [ジョブセット & URL] 秘密のキーを含んだ特定のジョブセットの URL を叩く
- 2. [ジョブセット& CLI] サーバーの crontab を使ってコマンドラインでジョブセットを実行する
- 3. [個別ジョブ & URL ]秘密のキーを含んだ特定のキューなし URL を、 curl コマンドを wget をサーバーの cron や crontab で設定して叩く
- 4. [個別ジョブ & URLキュー ] 秘密のキーを含んだ特定のキュージョブ開始の URL を叩いて起動、チェックキューの URL は叩き続ける。curl や wget コマンドを使って cron や crontab で行う。
- 5. [個別ジョブ & CLI ] サーバーの crontab 等を使ってコマンドラインで各ジョブを実行する
5つの方法どの方法で実行していくか、順々に判断していきましょう。
2-3. 一度に実行するか別々に実行するか決める
最初に一度に複数のジョブを実行する(ジョブセットを使う)か、ジョブを個別に実行するかを決めます。
2-3-1. ジョブセットを使う
concrete5 には、ジョブセットと呼ばれる、いくつかのジョブをまとめて一つのセットに登録し、それに付与された URL やコマンドを叩くだけで実行できる機能があります。
concrete5 サイトが小規模のもので、設定されたすべてのジョブの合計が30秒以内に完了しそうであればジョブセットで実行して良いと思います。
もしも、SSH やターミナルの知識があれば、ジョブセットは CLI ツールからも実行できます。 CLI ツールからの実行方法がわかる方はそちらを使うと、URL を使う方法より長い処理時間を得られる場合があります。
concrete5 には「Default」ジョブセットが最初から設定されています。
こちらを参考に Default ジョブセットを使うか、別の複数のジョブセットを作ったりして対応してください。
ただし、ジョブセットは後述のキュー機能を使うことができませんので気をつけてください。
私の場合は、さくらのレンタルサーバーなど設定できる Cron の数が限定されている小規模なサイトのみ、ジョブセットを利用していますが、基本的にジョブセットは使っていません。
2-3-2. 個別のジョブを別々に実行する
サーバーの制約なければ、少々面倒ですがこちらをおすすめします。そうすることでサーバーへの負荷や、時間制限もすこし余裕が出てくるからです。
こちらは、個別のジョブを個別の時間帯に実行する設定をします。
2-4. URL 方式で実行するか、コマンドラインから実行するかを決める
次に URL を叩いて実行するか、コマンドラインインターフェース (CLI) から実行するかを決めます。
2-4-1. URL を叩いて実行する方法
curl や wget と呼ばれるサーバー内にあるソフトを使って、concrete5 が発行する秘密キーを含んだ URL にアクセスをさせて実行します。
(ブラウザで URL を訪問するのと同じ動作です。)
2-4-2. CLI を使う (cron, crontab)
もう一つは、サーバーのシェル等を通じで実行する方法です。concrete5 には、URL を送信しなくても、bash で直接実行できる、コマンドラインインターフェース (CLI) と呼ばれる仕組みがあります。
CLI は、URL 方式に比べて、実行時間を論理的には無制限までできます。(レンタルサーバーの中には実行時間を制限している場合があります)。
ただ、現時点では CLI は後述のキューはサポートしていません。
そのため、8.5.4 時点、すごく大きなバッチ処理を行う場合は、URL 方式で分散させて実行させることをおすすめします。時間無制限のはずの CLI ですが、今までの経験で、ジョブが止まってしまう場合もあったからです。
2-5. キューありとキューなしを決める
まず、concret5 のジョブにはキュー (queue) があるものと、キューが無いものがあります。
わからないヒトは、キューをサポートしているジョブを実行する際は、できるだけ、キューを使って実行するようにしましょう。
2-5-1. キュー (queue) とは
簡単に説明すると大量の仕事を大きな一つのタスクとして実行するのではなく、小さい単位で分割して実行するものです。
PHP のような Web アプリは、ローカルのPCソフトと違って、ソフトをずっと起動し続けるようにはできていません。
URL でアクセスがあった時、30〜60秒の間だけ起動して、結果をユーザーに返して終了します。
1回の実行が1分以上かかるジョブは、キューを使ってください。
2-6. キュージョブの仕組みと実行方法
2-6-1. キュー Job 処理のイメージ
起動処理 | 中間処理 | 終了処理 |
---|---|---|
start() → | processQueueItem() → | finish() |
run_single でジョブが起動します |
check_queue で繰り返し実行されます 終わったら終了処理に移ります |
中間処理がすべて終了したら check_queue で終了処理がされジョブが完了します |
- 起動 URL (run_single) の URL が叩かれたらその該当ジョブの実行が開始されます
- チェックキュー (check_queue) の URL がたたかれたら、起動中のジョブすべての1バッチ処理がまとめて実行されます。
- チェックキュー (check_queue) で、ジョブの処理がすべて完了すれば、終了処理が走ってジョブが完了します。
check_queue の URL は、常時、短い間隔で起動されるように設定してください。実行中のジョブが何もなければ何も実行されないだけとなります。
2-6-2. キュー付きJob の設定方法
キューの実行方法は下記のとおりです。2つの Cron を設定する必要があります。
- 実行用 URL (run_single) を取得し Cron に設定
- まず、concrete5 の自動実行ジョブの管理画面を訪問し、設定をするジョブにある時計のアイコンをクリックします。
- 実行用 URL の一覧が現れます。「
キュー:まず、下のURLがこのジョブを開始したい時間に実行されるようにしてください:
」にかかれている URL がジョブを実行するための URL - この URL をサーバーの wget や curl で叩くコマンドを cron などで、ジョブの実行開始したい時刻に設定します。
- チェックキュー (中間 & 終了処理実行用, check_queue) URL を取得し Cron に設定
- さきほどと同じように、concrete5 の自動実行ジョブの管理画面を訪問し、設定をするジョブにある時計のアイコンをクリックします。
次に、下のURLが3〜5分くらいの間隔で実行されるようにしてください:
という URL を取得します。- この URL をサーバーの wget や curl で叩くコマンドを cron 設定で、毎分〜3分に1回ぐらいの間隔で実行するように設定してください。
- チェックキューは、 concrete5 サイト1つにつき、1個の cron の設定だけで結構です。
3. ジョブを実行する時に気をつけること
3-1. なるべく複数のジョブの同時起動はやめよう
一つのジョブが起動している時は、なるべく他のジョブが起動しないようにしましょう。
3-2. 負荷のあるジョブは、アクセスが増える時間帯の実行はできるだけ避けよう
ジョブはよく処理に負荷がかかるものがあります。
それらのジョブはできるだけアクセスの少ない早朝の時間帯にのみ実行するなど考慮しましょう。
3-3. 動作確認をしよう
ジョブは1日に1回など長期に渡って動作確認が必要になります。
すこし時間がかかりますが、設定後にきちんと動作しているかの動作確認をしましょう。
3-4. 定期的にジョブを確認 & 見直そう
サイトは運用年数が経つにつて、ページ数やファイル数などのデータも多くなり、1個1個のジョブの処理にも時間がかかってきます。
ジョブの実行と実行間隔は、公開直後は5分間隔でよかったのに、3年後には10分間隔に見直さないといけないなど、サイトのデータ量の変化に対応する必要があります。
また時々、Cron のログの確認など、定期的に cron がきちんと動いているか確認しましょう。
4. 具体的なサーバーでの設定方法
これで、具体的なジョブの実行イメージが湧きましたでしょうか?
サーバー設定方法は、別記事で解説しています。