2014年01月28日
PowerCMS 4 のタスクとワーカー(run-workers-daemon)
PowerCMS 4 のタスクとワーカーに続き、今回は常駐プロセスとして動作する run-workers-daemon についてご紹介します。
タスクとワーカー
「タスク」はサーバー側で定期的に実行する処理、「ワーカー」はジョブキュー(Webアプリケーション内で処理をリアルタイムに実行せずに予約のみ行い非同期処理する)を実行する処理を指します。代表的なタスクには記事やバナー、カスタムオブジェクトの「指定日時公開/非公開処理」、代表的なワーカーには「再構築キューの実行」があります。
run-workers-daemon スクリプトでは、Perlモジュール「Proc::Daemon」を利用することができます(モジュールが利用できない環境でも動作させることは可能です)。
起動の仕方とオプション
Movable Type 標準の run-periodic-tasks、前回紹介した run-workers、run-tasksと同じように、以下のように起動します。
$ cd $MT_HOME && perl tools/run-workers-daemon
この場合、ワーカーとして動作し、実行時間が到来したジョブを随時消化していきます。タスクも実行したい、という場合は以下のように --run_tasks
オプションをつけます。
$ cd $MT_HOME && perl tools/run-workers-daemon --run_tasks=1
逆に、タスクだけを実行したい場合することもできます。この場合は --run_tasks=1
とともに --run_workers=0
を指定します( --run_workers
オプションは指定しなければ 1 になるので、ワーカーとしての動作を行わせない場合に使用します)。
$ cd $MT_HOME && perl tools/run-workers-daemon --run_tasks=1 --run_workers=0
特定のワーカーやタスクに絞っての実行
run-tasks や run-workers と同様に、オプション --jobs
や --tasks
に対象を指定することで、そのワーカーやタスクに限定して処理をさせることができます。カンマ区切りにより、複数指定することもできます。
$ cd $MT_HOME && perl tools/run-workers-daemon --jobs=MT::Worker::Publish
$ cd $MT_HOME && perl tools/run-workers-daemon --jobs=MT::Worker::Publish,PluginManager::Worker::SwitchPlugins
実行間隔と実行時間の指定
run-workers-daemon が常駐している間、デフォルトでは 5 秒間隔で処理が実行されます。これを変更したい場合は --interval
オプションを使います。以下のように起動すると、3 秒間隔で再構築キューをチェックし、予約されたファイルをほぼリアルタイムに再構築することができます。
$ cd $MT_HOME && perl tools/run-workers-daemon --jobs=MT::Worker::Publish --interval=3
また、--lifetime
オプションに秒数を指定することで、一定時間常駐したらスクリプトを終了することができます。上記の設定を行うと再構築キュー経由の再構築について、午前 2 時に起動、3 秒間隔で常駐化し、23 時間 30 分(84600 秒)経過後に一旦終了し、再び翌午前 2 時に起動する...といったことを行うことができます。
0 2 * * * cd $MT_HOME && perl tools/run-workers-daemon --jobs=MT::Worker::Publish --interval=3 --lifetime=84600
ファイルやディレクトリの監視との組み合わせ
常駐プロセスとして実行する run-workers-daemon では、ファイルやディレクトリの監視を行うことができます。これを行うには、--watch_path
にディレクトリまたはファイルのパスを指定します。指定したパスがディレクトリの場合はディレクトリ内のファイル、ファイルの場合はそのファイルが生成・削除・更新された時に処理を行うことができます。
以下の例では、/var/www/html 以下のファイルが生成・削除・更新された時に再構築キューによる再構築処理が実行されます。ファイルの更新がない場合は待機します。
cd $MT_HOME && perl tools/run-workers-daemon --jobs=MT::Worker::Publish --interval=3 --watch_path=/var/www/html
なお、ファイルやディレクトリの監視のみを行う場合はオプション --watcher=1
をつけます。この場合はワーカーは起動されませんが、ファイルやディレクトリが生成・削除・更新されると以下のようなコールバックが実行されるので、これに合わせて処理を実行させることができます。
MT::Tool::WorkersDaemon::create_file | ファイルが生成された時(引数 $cb, $file) |
---|---|
MT::Tool::WorkersDaemon::update_file | ファイルが更新された時(引数 $cb, $file) |
MT::Tool::WorkersDaemon::delete_file | ファイルが削除された時(引数 $cb, $file) |
このコールバックを使うことで、例えば以下のような機能をもつプラグインを作成することができます。
- ファイルの改ざん検知を行うプラグイン
- ファイルが更新されたらクラウドストレージと同期するプラグイン
- ファイルが更新されたらキャッシュサーバに通知するプラグイン
複数プロセスの起動
run-workers-daemon ではワーカーやタスクの実行を個別に指定できるため、実行するタスクごとに実行間隔や実行ユーザを変更することができます。 以下の例では、現在のユーザ権限で 5 秒間隔で再構築キューによる再構築を行い、10 分間隔で root 権限でプラグインの配置やアップデートを行うことができます。
$ cd $MT_HOME && perl tools/run-workers-daemon --jobs=MT::Worker::Publish --interval=5
$ cd $MT_HOME && perl tools/run-workers-daemon --jobs=PluginManager::Worker::SwitchPlugins,PluginManager::Worker::UpdatePlugins --interval=600
お問い合わせください
run-workers-daemon を利用した各種機能のご要望、カスタマイズについてはフォームよりお問い合わせください。
- カテゴリー
- PowerCMS 4
コメントを投稿する