PowerCMS ではスケジュールタスクで記事/ウェブページの指定日時公開処理や非公開処理、一時ファイルの削除、再構築キュー経由の再構築などをサーバー側で行うことができます。PowerCMS ではこれらの処理の他、ステージ/公開同期処理やリビジョンのアップデート(日時指定での記事の差し替え)、バナーの公開/公開終了処理などにこのスケジュールタスクを利用します。
PowerCMS では、このスケジュールタスクについて、実行対象、実行間隔、実行ユーザー権限などを個別の処理ごとに設定できるうようになります。また、これらの処理を常駐プロセスとして動作させることにより、再構築キューによる分散処理などをより手軽に導入できるようになります。
PowerCMS のスケジュールタスクには Task(タスク)と Worker(ワーカー)の2種類があります。
- Task (タスク)
- 定期的に実行される一連のバッチ処理。代表的なものは記事 / ページの指定日時公開処理や非公開処理、一時ファイルの削除など。
- Worker (ワーカー)
- 管理画面操作などによって予約されたジョブの実行。代表的なものは再構築キュー経由の再構築。
スケジュールタスクの実行について、以下の3つのスクリプトを利用できます。それぞれは tools ディレクトリ以下に設置されています。
- tools/run-tasks
- スケジュールタスクのうち、タスクのみを実行するもの。タスクは個別に指定することができます。
- tools/run-workers
- スケジュールタスクのうち、ワーカーのみを実行するもの。ワーカーは個別に指定することができます。
- tools/run-workers-daemon
- run-tasks、run-workers が実行するワーカーやタスクを常駐プロセスで実行できます。ディレクトリを監視して変更されたファイルを対象に処理を行ったりすることもできます。
run-tasks で特定の処理のみを実行する
以下のように実行することで、記事/ウェブページの指定日時公開処理のみを実行することができます。
cd $MT_DIR && perl tools/run-tasks --tasks FuturePost
複数の処理を指定することもできます。その場合、--tasks
の引数にカンマ区切りで複数のタスクを登録します。以下の例は、記事/ウェブページの指定日時公開処理と、ステージ同期/公開同期処理を実行するものです。
cd $MT_DIR && perl tools/run-tasks --tasks FuturePost,StagingSync
スケジュールタスクと同様、crontab を利用して定期的に実行することができます。
0,20,40 * * * * cd $MT_DIR && perl tools/run-tasks --tasks FuturePost,StagingSync
--tasks
に指定できるタスク名の例
- FuturePost = 記事/ウェブページの指定日時公開処理
- FutureRevision = 日時指定されたリビジョンのアップデート
- CleanTemporaryFiles = テンポラリファイルの削除
- PurgeExpiredSessionRecords = 古いセッションレコードの消去
- PurgeExpiredDataAPISessionRecords = 古いData APIのセッションレコードの消去
- StagingSync = 日時指定されたステージ環境への同期/公開環境への同期処理
- MailPost = 携帯からのメール投稿の取り込み処理
- EstcmdGather = PowerSearchの検索インデックス更新(差分更新)
- CheckUpdatePlugins = PluginManager によるチェックとアップデート
- ImportCSV = オプションプラグイン CMSImporter による CSV インポート
- CustomObjectTasks = カスタム項目の指定日時公開/非公開の処理
--tasks
オプションは省略可能で、省略時にはすべてのタスクを実行します。
run-workers で特定の処理のみを実行する
以下のように実行することで、再構築キュー経由の再構築のみを実行することができます。
cd $MT_DIR && perl tools/run-workers --jobs MT::Worker::Publish
複数の処理を指定することもできます。その場合、--jobs
の引数にカンマ区切りで複数のジョブを登録します。以下の例は、再構築キュー経由の再構築と、プラグインマネージャのプラグイン移動(有効なプラグインディレクトリと無効化ディレクトリ間のディレクトリ移動)を実行するものです。
cd $MT_DIR && perl tools/run-workers --jobs MT::Worker::Publish,PluginManager::Worker::SwitchPlugins
--jobs
に指定できるタスク名
- MT::Worker::Publish = 再構築キュー経由の再構築処理
- PluginManager::Worker::SwitchPlugins = プラグインマネージャのプラグイン移動(有効なプラグインディレクトリと無効化ディレクトリ間のディレクトリ移動)
- PluginManager::Worker::UpdatePlugins = プラグインマネージャのプラグインアップデート処理
--jobs
オプションは省略可能で、省略時にはすべてのワーカーを実行します。
tools/run-workers-daemon (デーモンモードでのタスク/ワーカーの起動)
このスクリプトは run-tasks、run-workers が行う Worker(ワーカー)やTask(タスク)を常駐プロセスで実行できます。ディレクトリを監視して変更されたファイルを対象に処理を行ったりすることもできます。
Unix 環境では、Perlモジュール Proc::Daemon(Perlスクリプトをデーモン化するモジュール) のインストールを推奨します。Proc::Daemonモジュールが使えない場合、またはWindows環境の場合、run-workers-daemon は一定時間を置いてループ処理を行います。
※ 常駐化するため、場合によっては原因を取り除くまでエラーが出続けることがあります。
run-workers-daemon の実行方法は、run-workers、run-tasksと同様、コマンドラインから実行するか、crontab を利用します。
cd $MT_DIR && perl tools/run-workers-daemon --jobs MT::Worker::Publish,PluginManager::Worker::SwitchPlugins
--run_workers
と --run_tasks
オプション
run-workers-daemon はその名の通り、デフォルトでは Worker(ワーカー)を実行します。オプションを指定することで、Task(タスク)のみを実行、あるいは両方を実行することができます。
Worker(ワーカー)のみを実行するには --run_workers 1
を(—run_workersオプションは、省略時は1となりますので、明示的に指定する必要はありません)、Task(タスク)のみを実行するには、--run_workers 0 --run_tasks 1
を指定します。
以下の例は、記事/ウェブページの指定日時公開処理と、ステージ同期/公開同期処理をデーモンモードで起動し、30分おきに処理を実行するものです。
cd $MT_DIR && perl tools/run-workers-daemon --run_workers 0 --run_tasks 1 --interval 1800 --tasks FuturePost,StagingSync
--interval
オプションについて
--interval
オプションに数字(秒)を指定することで、常駐プロセスの実行間隔を指定することができます。このオプションの初期値は5(秒)です。
以下のように起動すると、3秒間隔で再構築キューをチェックし、予約されたファイルをほぼリアルタイムに再構築することができます。
cd $MT_DIR && perl tools/run-workers-daemon --interval 3 --jobs MT::Worker::Publish
--lifetime
オプションについて
run-workers-daemon は、常駐し、定期的に処理を実行しますが、--lifetime
オプションに秒数を指定することで一定時間常駐したらスクリプトを終了することができます。以下のように crontab に登録することができます。
0 2 * * * cd $MT_DIR && perl tools/run-workers-daemon --interval 3 --jobs MT::Worker::Publish --lifetime 84600
上記の設定を行うと再構築キュー経由の再構築を3秒間隔で常駐化し(AM2時に起動)、23時間30分(84600秒)経過後に一旦終了し、再びAM2時に起動します。
--watch_path
オプションと --watcher
オプション
--watch_path
にディレクトリまたはファイルのパスを指定することで、ディレクトリの場合はパス以下のファイル、ファイルの場合はそのファイルが生成・削除・更新された時に処理を行うことができます。以下の例では、/var/www/html 以下のファイルが生成・削除・更新された時に再構築キューによる再構築処理が実行されます。ファイルの更新がない場合は待機します。
cd $MT_DIR && perl tools/run-workers-daemon --interval 3 --jobs MT::Worker::Publish --watch_path /var/www/html
--watch_path
オプションとあわせて --watcher
オプションを指定すると、ワーカー/タスクの実行は行わず、ディレクトリ/ファイルの監視のみを行います。以下のように起動します。
cd $MT_DIR && perl tools/run-workers-daemon --interval 3 --watch_path /var/www/html --watcher 1
ファイルの更新を検知して処理を追加する
--watcher
オプションは、プラグイン等によってファイルを更新検知して処理を追加するために指定できます。上記のように起動した場合、PowerCMSデフォルトではファイルアップデート時に何も処理を行いませんが、ファイルアップデート時には以下のコールバックがコールされます。
- MT::Tool::WorkersDaemon::create_file (引数 $cb, $file) ファイルが生成された時
- MT::Tool::WorkersDaemon::update_file (引数 $cb, $file) ファイルが更新された時
- MT::Tool::WorkersDaemon::delete_file (引数 $cb, $file) ファイルが削除された時
プラグインを作成することによって、ファイルの更新を検知して動作する処理を組み込めるようになります。例えば、以下のようなものです。
- ファイルの改ざん検知を行うプラグイン
- ファイルが更新されたらクラウドストレージと同期するプラグイン
- ファイルが更新されたらキャッシュサーバーへ通知を送るプラグイン
複数プロセスを起動することで、より細かな制御が可能に
ワーカーやタスクの実行を個別に指定できるため、実行するタスク毎に実行間隔や実行ユーザーを変更することが可能になります。以下の例では、現在のユーザー権限で5秒おきに再構築キューによる再構築を行い、10分おきにroot権限でプラグインの配置やアップデートを行います。
cd $MT_DIR && perl tools/run-workers-daemon --jobs MT::Worker::Publish --interval 5
sudo cd $MT_DIR && perl tools/run-workers-daemon --jobs PluginManager::Worker::SwitchPlugins,PluginManager::Worker::UpdatePlugins --interval 600