【a-blog cms】Cronを使ってキャッシュを指定時間にリフレッシュする方法


これはa-blog cms Advent Calendar 21日目の記事です。

前回公開した記事の最後に「キャッシュを1日1回とか月1回とか時間指定でリフレッシュできる機能があると嬉しい。」と書きました。
特に日付や時間でコンテンツを切り替えたい時、具体的には、スケジュールモジュール使ってカレンダーを表示していて、日毎に表示を切り替えたい時や、前回の記事のように毎月1日の0時に情報を替えたい時など、今まで何度となくキャッシュで表示が切り替わらない問題にぶち当たり、キャッシュを無効にしたり、JSで対応するなどしてきました。

ところが、前回の記事を公開した直後、a-blog cms コミュニティー Slackにて、アップルップルの山本一道さんより、「cron でキャッシュをクリアするサンプルが /cron/example.php にありますので、そちらを活用ください!」とアドバイスいただき、ごにょごにょしてみたら毎月1日の0時0分にキャッシュをリフレッシュする設定ができました。はじめてのcron設定で最初は戸惑いましたが、問題なく設定できて安心しました。

このCron関連情報は検索しても出てこなかったので、今回はどのように設定したのか手順を紹介します。

/cron/example.php をチェック

まずは一道さんに教えてもらった /cron/example.php を確認しました。

<?php

// 設置場所に合わせて、php/standalone のパスを合わせてください。
require_once dirname(__FILE__) . '/../php/standalone.php';

set_time_limit(0);
ini_set('memory_limit', '512M');

acmsStandAloneRun(function () {
    acmsStdMessage('[Start] 処理を開始しました');
    try {
        /**
         * ここに処理を追加
         *
         * 例: キャッシュを削除する場合
         * ACMS_POST_Cache::clear('self-or-descendant');
         * ACMS_POST_Cache::refresh('self-or-descendant');
         */

        acmsStdMessage('[Success] 処理を完了しました');
    } catch (\Exception $e) {
        acmsStdMessage('[Error] ' . $e->getMessage());
        return false;
    }
    return true;
});

ふむふむ、どうやらコメントアウトされている部分を解除するだけでよさそうだ。これは助かる!
Ver. 2.11.0 より古いバージョンをお使いの場合は、4行目に記載されている「standalone.php」がそもそも無いと思うので、最新バージョンのパッケージから持ってくるか(未検証)、あるいはCMSをバージョンアップしてください。

コメントアウトを解除してリネーム

コメントアウトを解除したコードも一応載せておきます。ファイル名を「example.php」から「cashclear.php」にリネームしました。

<?php

// 設置場所に合わせて、php/standalone のパスを合わせてください。
require_once dirname(__FILE__) . '/../php/standalone.php';

set_time_limit(0);
ini_set('memory_limit', '512M');

acmsStandAloneRun(function () {
    acmsStdMessage('[Start] 処理を開始しました');
    try {
         ACMS_POST_Cache::clear('self-or-descendant');
         ACMS_POST_Cache::refresh('self-or-descendant');

        acmsStdMessage('[Success] 処理を完了しました');
    } catch (\Exception $e) {
        acmsStdMessage('[Error] ' . $e->getMessage());
        return false;
    }
    return true;
});

Cronの設定はサーバ側で

最初、Cronの設定はどうやるのか分からずa-blog cms内のコードを眺めていましたが、よくよく調べるとCronはサーバの機能なので、サーバ側で設定する必要があると分かりました。レンタルサーバーお使いの場合は「<レンタルサーバー名> + cron」と検索すれば、マニュアルページが出てくることが多いのでお試しください。

3つのレンタルサーバーでCron設定画面を見てみました。


エックスサーバーの場合


アカウント > Cron設定

アカウント > Cron設定


CPIの場合


公開サイト用設定 > スクリプト定期実行ツール

公開サイト用設定 > スクリプト定期実行ツール


ロリポップの場合


サーバーの管理・設定 > cron設定

サーバーの管理・設定 > cron設定


これらの画面を見れば分かると思いますが、実行スケジュールはサーバーの管理画面にて設定できます。
「コマンド(エックスサーバー)」、「実行するスクリプト(CPI)」、「実行ファイルパス(ロリポップ)」には、先ほど紹介した「cashclear.php」を指定します。パスの指定方法については、各サービスのルールに則ってください。


実行するスクリプトファイルのパーミッションを変更する

実行するスクリプトファイル(今の場合「cashclear.php」)に対し、実行権限を付与するパーミッション値「700」や「701」などに変更する必要があります。

後は、細かいことをここで書くより各サービスのマニュアルを参照してもらった方が正確と思います。キャッシュを指定時間にリフレッシュしたいと考えている方はお試しください。

最後までご覧いただき、ありがとうございました。


関連記事

この記事のタグから関連する記事を表示しています。

【a-blog cms】月替りで情報を切り替える実装TIPS