エントリーのアクセスランキングを定期的に更新したい。
「定期的」に処理を行なうならcronを使えば良いだろうと考えていたが、問題はRebuildをどのように処理するか。最初は個々(このブログで表示しているアクセスランキングの場合、"Popular Ranking"と"Main Index"の二つを再構築する必要がある。)のRebuildに必要なパラメータを付けてmt.cgiを実行する方向で検討してみたものの付け焼き刃の知識ではなかなか上手く行かない。
MTのプラグインで何か対処出来ないかな…と探していて「mt-rebuild」(tima thinking outloud.:Timothy Appneさん)と出会った。これはプラグインではなく単独実行するスクリプトで、簡単な引数を渡すことで任意テンプレートの再構築をコマンドラインから実行出来る。このmt-rebuildをダウンロード後展開し、中身のmt-rebuild.plをMTのルートディレクトリに置く。パーミッションは700。

(mt home)/mt-rebuild.pl

コンソールから実行し、Webブラウザで観て正常に再構築されていることを確認する。

% ./mt-rebuild.pl -mode="index" -blog_id=8 -template="Popular Ranking"
% ./mt-rebuild.pl -mode="index" -blog_id=8 -template="Main Index"
「-blog_id=」にはテンプレートの編集で適当なテンプレートの名前にマウスカーソルを合わせた時にブラウザ下部に表示される(一般的なブラウザの場合)blog_idを指定する。
「-template=」には再構築したいテンプレートの名前を指定する。

次はcronジョブへの登録だが、Webminを使うとGUIで実に簡単に出来る(MacOSXにはCronniXというcronジョブ設定ツールもある。)ので詳細は割愛。
Webminでのcronジョブ編集画面。実行ユーザ、実行するコマンドと引数、起動時間が簡単に設定出来、この画面から実行することで動作状況の確認も行なえる。写真の設定(毎時5分実行)は試験時のもので現在は毎時59分に再構築を実行している。

実際に実行しているシェル・スクリプト。MacOSXなので少々変則的なパスかも。

% cd /Library/WebServer/CGI-Executables/MT/

% ./mt-rebuild.pl -mode="index" -blog_id=8 -template="Popular Ranking"
% ./mt-rebuild.pl -mode="index" -blog_id=8 -template="Main Index"

こちらもパーミッションは700にする。
尚、mt-rebuild.plのオーナ、シェル・スクリプト(ここではmt-rebuild.sh)のオーナ、cronジョブ実行ユーザは全て同一にしておく。