PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > プラグイン > MT Studioでバッチ処理を書いて任意のタイミングで実行する

2015年01月10日

MT Studioでバッチ処理を書いて任意のタイミングで実行する

MT Studioを使うと、定期的に実行するバッチ処理を簡単に作成することができます。MTのプラグインでは run-periodic-tasks 実行時に処理を追加することができますが(スケジュールタスク)、実行するタイミングを細かく調整することができません(もちろん、頑張ればできないことはないのですが)。指定できるのは frequency (タスクの起動間隔 - 秒) で、例えば毎日何時に定期的に実行する、毎週末に定期的に実行する、等の定義ができません。

このような指定を行うには、以下のいずれかの方法で実現するしかありませんでした。

  • スケジュールタスクプラグインの中に実行時間を判別する処理を入れてそれ以外の時刻の実行時には処理を行わないで終了するような実装をする
  • MT::Toolをベースにしたスクリプトを作成し、cronやタスクスケジューラの設定で実行タイミングを指定する

MT::Toolsをベースにしたスクリプトの例

スケジュールタスクプラグインでの分岐は中々に面倒ですし、タイミングを変更する時にはコードに修正が必要になります。cronの設定は自由度が高い反面、サーバーにログインしてコマンドラインから設定する必要があります(Windowsの場合はタスクスケジューラが利用できます)。

MT Studioでバッチを作成して実行タイミングを指定する

MT Studioでは、バッチを作成して管理画面で実行タイミングを簡単に指定することができます。指定できるタイミングは以下の通りです。

毎回run-periodic-tasks実行時に毎回
1回指定した時刻に1度だけ実行
毎時一時間に1回、指定時刻に実行
毎日 毎日1回、指定時刻に実行
毎週毎週指定した曜日の指定した時刻実行
毎月 毎月指定した日の指定した時刻に実行

※実行されるのは、正確には指定した時刻より後に最初に run-periodic-tasks が実行されるタイミングとなります。

毎週、毎月を指定する場合「詳細」欄に指定する曜日もしくは日を指定します。

  • 毎週 : 日曜日 = 0, 月曜日 = 1, 火曜日 = 2, 水曜日 = 3, 木曜日 = 4, 金曜日 = 5, 土曜日 = 6
  • 毎月 : 1〜31までの数字もしくは'LAST'が指定できます。

複数指定する場合は「,」(カンマ)で複数の値を区切ります。

バッチの実行タイミングの指定

定期的に特定のテンプレートを再構築するプラグインをMTMLで作成する

バッチの用途で簡単に思いつくものと言えばテンプレートの再構築でしょうか。MT StudioであればMTタグで簡単に記述できます。

特定のページをURLを指定して再構築するには MTRebuildタグが利用できます。

MTRebuild

url モディファイアと blog_id モディファイアを指定して、ページを再構築します。

<$MTRebuild url="http://www.powercms.jp/index.html" blog_id="1"$>

インデックスアーカイブであれば、MTRebuildIndexByIdタグを使うこともできます。

MTRebuildIndexById

template_id(カンマで区切られたインデックステンプレートの ID)モディファイアを指定してインデックスアーカイブを再構築します。RebuildTriggerBackgroundTasks 環境変数を指定すると、バックグラウンドで再構築処理を行います(この設定は FastCGI 環境では無効になります)。

<$MTRebuildIndexById template_id="18,19"$>

特定のページにアクセス可能かどうかを定期的にチェックする(死活監視)

ステータスコード200が返らなかった時には通知のメールを送ります。

<MTIfTheURLFound url="http://www.powercms.jp/index.html" target_outlink="1">
<MTElse>
<MTSendMail subject="障害検出" body="
        http://www.powercms.jp/index.html にアクセスできませんでした。
        l" to="junnama@alfasado.jp">
</MTIfTheURLFound>

MT Studioがインストールされている環境であればこれだけで動作します。MT Studioがインストールされていない環境では、プラグインをエクスポートして、StudioPlayerと共に環境に設置してください。

プラグインのエクスポート方法とStudioPlayerについてはこちらの記事を参照下さい。


カテゴリー
プラグイン
技術情報

Recent Entries