MTのスケジュールタスク機能は、指定日投稿のほかにも公開キューによる再構築や迷惑コメント・トラックバックの削除、不要になったセッションやテンポラリファイルの削除など重要な処理を行っています(弊社でもいくつかのプラグインでスケジュールタスクを利用しています)。
MTの機能をフルに活用したいのであれば、この機能は可能な限り設定するべきです。
MTのスケジュールタスクを実行する方法として、もっとも一般的な対応はMTが動作しているサーバー上で、MTに含まれるスクリプト run-periodic-tasks を定期的に実行する方法ですが、定期的な実行を行うためには cron や Windows タスク・スケジューラ の設定が必要であり、利用するサーバーによってはこの設定を行うことができずに、スケジュールタスク機能を設定しないまま利用されている方もいらっしゃるのではないかと思います。
MTでは、サーバー上で run-periodic-tasks を実行できない場合の代替策として
指定日投稿や公開キュー等のスケジュール処理の設定 | Movable Type 4 ドキュメントに書いてある
の2通りの方法が用意されています。
- ログ・フィードの取得時に実行
- XML-RPC API で拡張された mt.runPeriodicTasks の利用
どちらの方法もサーバーの設定を必要とせず外部からMTのスケジュールタスクを実行させることが可能なのですが、その設定方法については具体的に解説されていません。
このサイトでは以前Rubyスクリプトを用いた方法を紹介しましたが、今回は、Windowsに限定した、WSH(VBScript)を使った方法を紹介したいと思います。
この方法は、IEがインストールされているWindows XP/Windpows Server 2003以上の環境であれば、追加のソフトを必要としないことが特徴です。
スクリプトのインストール
さっそくスクリプトをインストールします。
次のリンクからスクリプトをダウンロードして、適切なフォルダに保存してください。
今回は このスクリプトをC:\Scripts の下に保存するものとして説明します。
ダウンロード:runtasks.vbs VBScriptファイル
事前準備
このスクリプトを利用するためには、次の3つの情報が必要です。
- XML-RPC APIのエンドポイント
通常は設定を行うMTの mt-xmlrpc.cgi を指すURLとなります - APIを実行するユーザー名
- APIを実行するユーザーのAPIパスワード
MTのユーザー情報の編集ページで設定できる Webサービスパスワード のことを指します
動作テスト
まずは動作テストを行います。コマンドプロンプトを開き、以下のようなコマンドラインを実行します。
cscript C:\Scripts\runtasks.vbs [エンドポイント] [ユーザー名] [APIパスワード]
[エンドポイント]、[ユーザー名]、[APIパスワード]には先ほどの情報を当てはめます。
問題なく実行された場合には何も表示されずに処理がもどります。
簡易的ですがエラーメッセージを表示しますので、表示された場合にはエラーメッセージを見て対処してください。
タスク・スケジューラへの登録
無事テストに成功した場合には、スクリプトの実行をタスク・スケジューラに登録しましょう。
コマンドプロンプトを開き、次のコマンドラインを実行します。
schtasks /Create /SC MINUTE /MO 5 /TN runPeriodicTasks /TR "wscript.exe //B C:\Scripts\runtasks.vbs [エンドポイント] [ユーザー名] [APIパスワード]"
実行するWindowsのアカウント情報として、現在ログインしているユーザーのパスワードを要求されますので、これを入力すると、タスク・スケジューラに runPeriodicTasks というタスクが登録されます。
この例では5分に1回実行されるようになります。実行タイミングについては /SC /MO の2つのオプションで設定します。
これで定期的にタスクが実行されるようになりました。
実際の運用
当然といえば当然なのですが、タスクを登録したWindows OSが稼動していなければ、MTのスケジュールタスクも実行されませんのでご注意ください。
タスクの実行状況は、タスク・スケジューラを表示することで確認できます。
また、実行時にエラーが発生した場合には、アプリケーションログに記録されますので、定期的にチェックするとよいでしょう。