-
Notifications
You must be signed in to change notification settings - Fork 9
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を定期的に利用する
ここでは、単純なタスクの追加プラグインを作成し実際に起動させるところを解説します。
- 起動間隔は2分
- 起動時にデバッグログとして"run scheduled tasks"と表示
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モジュール)::(ハンドラ関数)
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
関数の中の処理が行われる- 今回は
doLog
関数( プラグインのデバッグ 参照)を使って"run scheduled tasks"がデバッグログに出力される
- 今回は
今回は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に追加し、ハンドラ関数を実装するだけですので比較的簡単です。この期に「定期的にやっている処理」をスケジュールタスク化されてみてはいかがでしょうか?
- プラグイン開発のためのファーストステップ
- レジストリ、YAMLについて
- 環境変数について
- プラグインのローカライゼーションについて
- テストドリブンでのプラグインの開発について
- グローバル・モディファイアプラグインの開発について
- ファンクションタグ プラグインの開発について
- ブロックタグ プラグインの開発について
- コンディショナルタグ プラグインの開発について
- プラグインのデバッグ
- プラグインの設定方法
- コールバックとフックポイント
- スケジュールタスクの開発
- MTオブジェクトの利用方法
- 独自オブジェクトの作成
- 新規アプリケーションの作成
- Transformerプラグインの開発
- 管理画面のメニュー修正