Skip to content

Japanese plugin dev 3 3

uehatsu edited this page May 12, 2011 · 11 revisions

スケジュールタスクの開発

はじめに

MTは、"$MT_DIR/tools/run-periodic-tasks"の利用などで、スケジュールタスクとして日時指定投稿や期限切れセッションの定期的な消去が行えます。

今回はこれらのスケジュールタスクにプラグインを用いてタスクの追加を行う方法を解説します。

スケジュールタスクとは?

スケジュールタスクとは文字通り予定されているタスクを定期的に実行するものです。

初期状態では以下の動作が行われます。

  • 日時指定公開
  • 公開キュー経由によるバックグラウンドでのページ構築
  • スパム コメントおよびトラックバックの削除
  • 一時ファイルの削除
  • 有効期限切のセッション情報の削除

この動作をさせるには、以下の設定や実行を行う必要があります。詳細は割愛します。

  • コマンドラインから直接"$MT_DIR/tools/run-periodic-tasks"を定期的に起動する
  • UNIX, Linuxの場合のcronで、Windowsの場合はタスク・スケジューラで"$MT_DIR/tools/run-periodic-tasks"を、定期的に自動起動するよう設定する
  • ログフィードを定期的に取得する
  • XML-RPCのAPI、mt.runPeriodicTasksを定期的に利用する

単純なタスクの例

ここでは、単純なタスクの追加プラグインを作成し実際に起動させるところを解説します。

仕様

  1. 起動間隔は2分
  2. 起動時にデバッグログとして"run scheduled tasks"と表示

config.yaml

id: MyPlugin10
key: MyPlugin10
name: <__trans phrase="Sample Plugin Scheduled Tasks">
version: 1.1
description: <__trans phrase="_PLUGIN_DESCRIPTION">
author_name: <__trans phrase="_PLUGIN_AUTHOR">
author_link: http://www.example.com/about/
doc_link: http://www.example.com/docs/
l10n_class: MyPlugin10::L10N

tasks:
    MyCustomTask:
        label: Do something every two minutes
        frequency: 120
        code: $MyPlugin10::MyPlugin10::Tasks::do_task

解説

  • tasks
    • タスクを設定するレジストリのトップ
  • 例)MyCustomTask
    • 追加するタスク名
  • label
    • タスクの説明文
  • frequency
    • タスクの起動間隔(秒)
  • code
    • 今回利用するハンドラ関数
    • ($プラグイン名)::(Perlモジュール)::(ハンドラ関数)

Tasks.pm

package MyPlugin10::Tasks;
use strict;

sub do_task {
    doLog("run scheduled tasks");
}

sub doLog {
    my ($msg, $class) = @_;
    return unless defined($msg);

    require MT::Log;
    my $log = new MT::Log;
    $log->message($msg);
    $log->level(MT::Log::DEBUG());
    $log->class($class) if $class;
    $log->save or die $log->errstr;
}

1;

解説

  • 起動すると do_task 関数が呼ばれる
  • do_task 関数の中の処理が行われる

起動の確認

今回はLinuxでrun-periodic-tasksを直に実行して、その挙動を確認します。

起動

$ cd $MT_DIR
$ sudo -u apache ./tools/run-periodic-tasks
$ sudo -u apache ./tools/run-periodic-tasks

解説

  • sudoユーザをapacheとしていますが、環境によって異なるので適宜書き換えて下さい。(例:www-data, SuExecユーザ名)
  • 時間を開けずにrun-periodic-tasksを2回起動しています。

確認

  • [システムメニュー] > [ツール] > [ログ] でログ一覧を表示した後、ログレコードの レベルデバッグ にしてフィルタをかけます。
  • “run scheduled tasks”行が日付「直前」で1行出力されているのを確認します。

解説

  • 2回起動したので、本来であれば2行"run scheduled tasks"が表示されそうですが、実行間隔を2分(120秒)としてあるため、最初に起動してから2分以内は何度 run-periodic-tasks を起動しても"MyCustomTask"は実行されません。
  • 2分以上時間をあけてから、もう一度 run-periodic-tasks を起動すると"MyCustomTask"が実行され、ログに"run scheduled tasks"と追記されます。

まとめ

今回のようにタスクを新設することで、一定期間後にコメントやトラックバックを閉じたり、ログをバックアップを取った上で削除などの処理ができます。

方法もconfig.yamlに追加し、ハンドラ関数を実装するだけですので比較的簡単です。この期に「定期的にやっている処理」をスケジュールタスク化されてみてはいかがでしょうか?

プラグインダウンロード

MyPlugin10.zip(2.25KB)

プラグイン開発ガイド インデックス

  1. プラグイン開発のためのファーストステップ
  2. レジストリ、YAMLについて
  3. 環境変数について
  4. プラグインのローカライゼーションについて
  5. テストドリブンでのプラグインの開発について
  6. グローバル・モディファイアプラグインの開発について
  7. ファンクションタグ プラグインの開発について
  8. ブロックタグ プラグインの開発について
  9. コンディショナルタグ プラグインの開発について
  10. プラグインのデバッグ
  11. プラグインの設定方法
  12. コールバックとフックポイント
  13. スケジュールタスクの開発
  14. MTオブジェクトの利用方法
  15. 独自オブジェクトの作成
  16. 新規アプリケーションの作成
  17. Transformerプラグインの開発
  18. 管理画面のメニュー修正
Clone this wiki locally