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

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMS 4 > PowerCMS 4 のタスクとワーカー(run-workers-daemon)

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

Recent Entries