&pgid();
#contents
第17回は[[MT::Task>http://www.movabletype.org/documentation/man/MT/Task.html]]、[[MT::TaskMgr>http://www.movabletype.org/documentation/man/MT/TaskMgr.html]]クラスのリファレンスを読み、MTでのタスク管理の方法についてとりあげたいと思います。
その他のネタ
- [[Scheduled Tasks | MovableType.org - Home of the MT Community>http://www.movabletype.org/documentation/developer/scheduled-tasks.html]]
** 動画(Ustream) [#h078a3d2]
// 勉強会の模様をアップしました。
勉強会の模様をアップしました。
// #htmlinsert(study/mtplugin-15.html)
#htmlinsert(study/mtplugin-17.html)
Ustreamのチャンネルはこちら。
http://www.ustream.tv/channel/mt%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%8B%89%E5%BC%B7%E4%BC%9A
** MT::Task [#f32bd2dc]
- [[MT::Task>http://www.movabletype.org/documentation/man/MT/Task.html]]
- [[Movable Type オブジェクト・リファレンス - MT::Task>http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_task.html]]
[[Movable Type オブジェクト・リファレンス - MT::Task>http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_task.html]]より、
MT::Taskオブジェクトは、MTが実行可能なタスクを定義するために用います。基本オブジェクトでは、すべてのタスクの共通の特性と、呼び出しのためのメソッドを定義しています。通常、プラグインはMT::Taskオブジェクトを生成し、MTクラスのadd_taskメソッドに渡します。
つまり、MTに実行させるタスクを表現するオブジェクト。
package MyPlugin;
MT->add_task(new MT::Task({
name => "My Task",
key => "Task001",
frequency => 3600, # at most, once per hour
code => \&runner
}));
のように使う。
*** MT::Task->new(\%params) - コンストラクタ [#z3d9d9bb]
指定可能なパラメータ(%paramsのkey)は[[Movable Type オブジェクト・リファレンス - MT::Task>http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_task.html]]より、
key
タスクを識別する一意な文字列を指定します。タスクのセッション・レコードを管理するために用いられます。タスクのセッション・レコードは、最後にタスクが実行された時間を記録するものです。セッション・レコードは、kindカラムの値が"PT"(periodic taskの略)に設定されたレコードとして、mt_sessionテーブルに保存されます。
name
タスク名です。これはオプションですが、タスクが失敗したときのエラー・ログ・レコードを記録する際に用いられるものです。
frequency
frequency(頻度)には、時間を秒数で指定します。どのような間隔でタスクを実行するかを定義するものです。ただし、ここで指定した頻度でタスクが実行される保証はありません。指定した期間内に2回以上実行されることがないことを保証するだけです。
code
MT::TaskMgrがそのタスクを呼び出すときに実行されるコードを、コード・リファレンスとして指定します。ここで指定したコードには、パラメーターとしてMT::Taskインスタンスが渡されます。
*** $task->init [#a77b508d]
MT::Taskインスタンスの初期化コード。
MT::Task->initは空のメソッドであるため、
サブクラスでオーバーライドして利用するものと見込まれる。
*** $task->run [#ra3d6c7e]
タスクが実行する時に呼ばれるメソッド。
当該MT::Taskオブジェクトを引数にして、コンストラクタのcodeで指定されたコードを呼び出す。
*** $task->key([$key])、$task->name([$name])、$task->frequency([$frequency]) [#ld6f1a82]
プロパティkey、name、frequencyのゲッター、セッター
** MT::TaskMgr [#wc9b1b74]
- [[MT::TaskMgr>http://www.movabletype.org/documentation/man/MT/TaskMgr.html]]
- [[Movable Type オブジェクト・リファレンス - MT::TaskMgr>http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_taskmgr.html]]
[[Movable Type オブジェクト・リファレンス - MT::TaskMgr>http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_taskmgr.html]]より、
MT::TaskMgrは、複数のタスク(MT::Taskオブジェクトとして個々に宣言されたもの)を実行するためのシンプルなフレームワークを定義します。各タスクは、定義された頻度で実行されます。失敗したタスクは、ログにその旨が書き込まれます。
つまり、MTのタスク実行、管理を表現するクラス。
# タスク(MT::Task)を登録して
MT::TaskMgr->add_task($task);
# 実行する
MT::TaskMgr->run_tasks;
のように使う(要検証。特にadd_task)。
*** タスクを実行するタイミング [#v174b778]
[[Scheduled Tasks | MovableType.org - Home of the MT Community>http://www.movabletype.org/documentation/developer/scheduled-tasks.html]]より、
Tasks are run via one of two ways:
* through the use of the run-periodic-tasks.pl framework
* through the web interface
cron等のシステムが提供するスケジューラーが利用できる場合は前者を、そうでない場合は後者を利用します。後者は、管理画面へのアクセスをトリガーにしてタスク実行するので、たとえば、システムのActivity FeedをGoogle Readerに登録するなどで、タスクの安定した実行を試みることができます(とはいうものの当然cron等に比べて不安定であり、定期実行を保証するものにはなりえませんが)。
** 利用例 [#va05524d]
*** コールバック:PeriodicTask [#fb143c0d]
** 次回予定 [#p808950f]
#blikifooter(進地);
tag: [[Movable Type>tag/Movable Type]]、[[MT>tag/MT]]、[[MTPlugin>tag/MTPlugin]]、[[勉強会>tag/勉強会]]