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

PowerCMS ブログ

ホーム > PowerCMS ブログ > サポート > バックグラウンド処理の実行と設定

2016年08月19日

バックグラウンド処理の実行と設定

Movable Type では run-periodic-tasks スクリプトを実行すると様々な処理をバックグラウンドで行うことができます。

バッググラウンドで行われる処理は Movable Type 標準のものもあればプラグインで追加したものなど様々です。 それらの中からいくつかピックアップしたものが下記になります。

処理の中にはプレビューファイルやセッションデータの削除などクリーンナップの処理も含まれますので日時指定の公開、非公開が必要ない運用でも、 run-periodic-tasks スクリプトは利用されることをおすすめします。

  • 日時指定された記事(ページ)の公開
  • 日時指定された記事(ページ)の非公開
  • 日時指定されたリビジョンから記事(ページ)の更新
  • プレビュー時に生成されるファイルの削除
  • 古いセッションデータの削除
  • 日時指定されたステージ環境への同期
  • 日時指定された公開環境への同期
  • 公開キューによる再構築

これらの処理はタスク、ワーカー、という2種類にわけられるのですが今回はふれません。タスクとワーカーについては以前の記事を参照してください。

run-periodic-tasks スクリプトの実行

run-periodic-tasks スクリプトは Movable Type の tools ディレクトリ内にあります。

tools/run-periodic-tasks

この run-periodic-tasks スクリプトを実行することでバッグラウンドの処理が行われるようになりますが、 実行時には2つ注意が必要です。

1つ目の注意点は実行時のカレントディレクトリです。

run-periodic-tasks スクリプトは Movable Type のアプリケーションディレクトリから実行する必要があります。 アプリケーションディレクトリとは Movable Type のインストールディレクトリで、多くの場合は mt.cgi などの CGI ファイルのある階層、という認識で問題ないと思います。

(これ以降に登場する $MT_HOME という記述は Movable Type のアプリケーションディレクトリ を指します。ご利用のサーバにあわせて読み替えてください)

$ cd $MT_HOME
$ ./tools/run-periodic-tasks

PowerCMS サポートでも run-periodic-tasks スクリプトが実行できないお問い合わせを頂くことがあり、コマンドの内容をヒアリングすると下記のように実行されていることは少なくありません。

下記はだめな例なので真似しないでください!

$ cd $MT_HOME/tools
$ ./run-periodic-tasks
$ $MT_HOME/tools/run-periodic-tasks

もう1つの注意点は実行ユーザです。

バックグランド処理の中にはファイル出力を行うものも含まれます。 このとき出力されるファイルの所有者(オーナ)は、run-periodic-tasks スクリプトを実行するユーザになります。

run-periodic-tasks スクリプトを実行する際のユーザは、管理画面の CGI を実行するユーザと同じである必要があります。

実行ユーザが同じでない場合、下記のような問題が起こりえます。

  • 管理画面の操作で出力されたファイルが、バックグラウンド処理で更新できない
  • バッググラウンド処理で出力されたファイルが、管理画面の操作で更新できない

run-periodic-tasks スクリプトの実行ユーザについては、ウェブサーバの設定を確認した上で行ってください。

例: CGI の実行ユーザが apache の場合

$ cd $MT_HOME
$ sudo -u apache ./tools/run-periodic-tasks

run-periodic-tasks スクリプトの定期的な実行

run-periodic-tasks スクリプトを実行するために、毎回 SSH でログインしなければならない、という事はありません。

cron などサーバにあらかじめ用意された仕組みを利用することで、サーバへのログインなしに、定期的な実行が可能です。

以降 cron への設定については crontab コマンドを想定した内容になります。 cron への設定は /etc/cron* 配下へのファイル追加でも可能ですが、 その場合はフォーマットが異なるため専門サイトや専門書などを参照してください。

下記は cron への設定の一例です。 毎時0分、20分、40分のタイミングに実行する設定です。

0,20,40 * * * * cd $MT_HOME && ./tools/run-periodic-tasks

実行のタイミングは運用にあわせて適切に行ってください。

例えば管理画面の利用時間が明確に決まっているのであれば、下記のような設定も有効だと思います。

例 : 朝9時から夕方5時まで、毎時0分、20分、40分のタイミングに実行する設定

0,20,40 9-17 * * * cd $MT_HOME && ./tools/run-periodic-tasks

cron へ設定する場合も、実行ディレクトリ、実行ユーザに注意してください。

実行ユーザについて、crontab コマンドを使って設定する場合には下記のようなコマンドを参考にしてください。

例: CGI の実行ユーザが apache の場合

# crontab -u apache -e

$ sudo -u apache crontab -e

補足

記事中に登場するコマンドの実行や設定内容は Linux サーバを前提としていますが、run-periodic-tasks スクリプトは Windows サーバでもご利用いただけます。

Windows サーバでは cron がご利用頂けませんが、「タスクスケジューラ」を利用することで定期的な実行が可能です。

「タスクスケジューラ」への設定については Movable Type.jp のページを参照してください。


カテゴリー
サポート
トラブルシューティング
技術情報

Recent Entries