Concrete CMS の自動実行ジョブのサーバー側の設定方法 (レンタルサーバー別解説付き!)

Concrete CMS は、sitemap.xml や検索ブロックやページリストブロックの絞込で使用される索引インデックスを自動実行ジョブで生成しています。

反対に言うと、sitemap.xml や検索は、自動実行ジョブを実行しないと生成されません。つまり、Google の Search Console や検索ブロックを使えないです。

Concrete CMS は、ユーザーがサイトにアクセスした時にジョブを実行する設定もできますが、ユーザーがアクセスすると同時に実行する方法は、地雷を踏んでしまったユーザーが著しくアクセス速度が遅くなってしまうことになるのでよろしくありません。

ということで、サーバーには、CRON というプログラムが実装され、設定が可能です。

おまけで、さくらインターネットスタンダードプランと、Zenlogic 、CPI シェアードプランのサンプルを最後に添付しています。

Concrete CMS の自動実行ジョブの設定方法

自動実行ジョブは Concrete CMS の [管理画面] - [システムと設定] - [最適化] - [自動実行ジョブ] の画面から設定します。

ジョブセットの設定

[ジョブセット] タブをクリックし、[デフォルト] をクリック。走らせたいジョブを選択し保存します。

必要のないジョブは選択しないほうが良いでしょう。

ここで最低限設定すべきジョブは

  • 検索エンジンインデックス (更新)
  • sitemap.xml ファイルを生成する

の2つです。他のジョブも必要に応じて選択し、[ジョブを更新]ボタンを押してください。

自動実行ジョブ実行用 URL の取得

(* コマンドラインツールを使用する場合は、URL の取得は不要です)

そうして、デフォルト実行ジョブの選択が終わったら、「自動化の方法」のセクションで「Cron を使用」という項目が選択。URL が表示されていなければ「スケジュール設定を更新」ボタンを押して保存します。

そこに現れている URL を保存してください。

なお、この URL は、悪意のある他人に知られてしまうと、DDoS などサーバーに負荷を与える攻撃をされやすくなりますので、必ず秘密にしてください。

コマンドラインツールを使う場合

Concrete CMS 5.7.5 よりコマンドラインツールが導入されました。

簡単に SSH などから Concrete CMS の操作を行うことができます。

CRON を実行するときは絶対パスを指定しないといけませんので、Concrete CMS がインストールされた先の絶対パスを取得しておいてください。

例えば、Concrete CMS が /var/www/html ディレクトリ配下に設置されて、デフォルトのジョブセットを実行したい場合は下記のようになります。

command.bash
/var/www/html/concrete/bin/concrete5 c5:job --set Default

次に特定のジョブだけを個別に実行することもできます。以下の例は索引インデックスジョブ(更新)を実行する時のサンプルです。ジョブのハンドルを入力します。ハンドルはジョブのファイル名と同じです。

command.bash
/var/www/html/concrete/bin/concrete5 c5:job index_search

サーバーの管理画面によって設定画面は異なりますが、root 権限のあるサーバーで crontab のテキストファイルで設定しているとこのような設定になるかと思います。

crontab.conf
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  0  *  *  *  * katz /var/www/html/concrete/bin/concrete5 c5:job --set Default
  1  *  *  *  * katz /var/www/html/concrete/bin/concrete5 c5:job index_search

(katz というユーザーで1時間おきにジョブを実行するという設定です。)

内部的には bash を介して php コマンドを実行しています。

 

curl コマンドを使う場合

sh や bash コマンドを使える場合は、、下記のように設定することをおすすめします。

command.bash
curl -o /dev/null -s "http://example.com/index.php/ccm/system/jobs?auth=XXXXXXXXXXX"
  • wget というプログラムは本来はその先のファイルなどを取得するプログラムです
  • -o /dev/null は出力を出さないというオプションです。デバッグをしたい場合は
  • -s はURL取得中の出力を出さないというオプションです

サーバーの管理画面によって設定画面は異なりますが、root 権限のあるサーバーで crontab のテキストファイルで設定しているとこのような設定になるかと思います。

crontab.conf
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  0  *  *  *  * katz curl -o /dev/null -s "http://example.com/index.php/ccm/system/jobs?auth=XXXXXXXXXXX"

(katz というユーザーで1時間おきにジョブを実行するという設定です。)

  

wget コマンドを使う場合

sh や bash コマンドを使える場合は、下記のように設定することをおすすめします。

command.bash
wget -t 1 -q --spider http://example.com/index.php/ccm/system/jobs?auth=XXXXXXXXXXX
  • wget というプログラムは本来はその先のファイルなどを取得するプログラムです
  • -t 1 は1回しか試行しないオプションです。デフォルトではエラーが出ると20回繰り返します。
  • -q でメッセージを出さないようにします
  • --spider は、成功したら何も返さず、失敗したらそれをメッセージとして伝えるオプションです。
  • URL は上記で取得した URL を入力します。

サーバーの管理画面によって設定画面は異なりますが、root 権限のあるサーバーで crontab のテキストファイルで設定しているとこのような設定になるかと思います。

crontab.conf
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  0  *  *  *  * katz wget -t 1 -q --spider http://example.com/index.php/ccm/system/jobs?auth=XXXXXXXXXXX

(katz というユーザーで1時間おきにジョブを実行するという設定です。)

 

レンタルサーバー別設定例

お断り:2019/4/5 時点での情報です。

さくらインターネット

さくらインターネット、スタンダードプランの場合は、wget と php ファイルを作って実行することが両方可能でしたが、wget と php の実行ファイルも絶対パスで指定する必要があります。

[サーバーコントロールパネル] - [アプリケーションの設定] - [CRON の設定]から設定します。

時間の設定は、さくらのコントロールパネルから行います。

さくらの PHP ファイルは「/usr/local/bin/php」にあるので、PHP のパスを確認してください。

さくらで Cron に直接指定して実行する場合

 「デフォルト」ジョブセットの実行コマンドへの設定例
/usr/local/bin/php /home/XXXXX/www/concrete/bin/concrete5 c5:job --set Default 1> /dev/null
 「索引インデックス(更新)」ジョブの実行コマンドへの設定例
/usr/local/bin/php /home/XXXXX/www/concrete/bin/concrete5 c5:job index_search 1> /dev/null

「XXXXX」に自分のさくらのサブドメイン名を入力してください。 1 > /dev/null の設定を加えているので実行結果のメール送信していません。実行コマンドに上記のコマンドをいれて、実行日時の指定をし、保存してください。

さくらで wget コマンドで自動実行ジョブ

wget コマンドを、サーバー上の絶対パスである /usr/local/bin/wgetとしてコントロールパネルから入力する必要があります。

「実行コマンド」のところに下記の例のように入力してください。

command.bash
/usr/local/bin/wget -t 1 -q --spider http://example.com/index.php/ccm/system/jobs?auth=XXXXXXXXXXXXXX

さくらでの CRON 実行結果を別のメールアドレスで受け取りたい場合

実行コマンドにCRON 設定一覧ページの環境変数に「MAILTO」、環境変数の値にメールアドレスを入力すると、postmaster@ 以外のメールアドレスに CRON の実行結果を飛ばすことができます。「1 > /dev/null」を実行コマンドから取り除くことを忘れないでください。

 

CPI 設定方法

KDDI ウェブコミュニケーションズの CPI 共有ホスティングサービスで利用できる自動実行ジョブです。wget コマンドは、「.sh」という拡張子のファイルを作成することで可能。PHPファイルも使えます。

管理画面の設定方法

コントロールパネルから、テスト環境、公開サーバーどちらかのメニューを選択すると、CRON 設定ができる画面が現れます。

ここで、下記のいずれかの方法でアップロードしたファイルが選択肢として現れますので、それを選択し、スケジュール時間を設定します。

sh ファイル

sh ファイルは、bash とほぼ同じものです。ファイルの拡張子と、1行目の宣言文が違うだけとなります。

URL がわかればブラウザ上からも見えてしまうため、必ずファイル名を長くしたりして、推測できないようなファイル名にして「/html」以下にアップロードしてください。

cron.sh
#!/bin/sh
/usr/local/bin/wget -t 1 -q --spider http://example.com/index.php/ccm/system/jobs?auth=XXXXXXXXXXXXXX

 

以上