Japan
サイト内の現在位置を表示しています。
Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法
1. 概要
Red Hat Enterprise Linuxでは、OSインストール後の初期状態において、cron(8)デーモンによって実行される命令が複数定義されます。その中の1つにtmpwatchコマンドの機能を使った、ある一定期間アクセスされていないファイルを自動的に削除する命令(スクリプト)があります。
この機能が動作することによって、WebOTXアプリケーションサーバ製品の一部の機能で問題が生じます。
- J2EE Deployment API利用によるアプリケーションの配備・配備解除
J2EE Deployment APIを使ったソフトウェア製品や業務システムは注意が必要です。
2. 対象製品
次の製品が該当します。対象となるLinuxプラットフォームは「Red Hat Enterprise Linux AS 3、4」「Red Hat Enterprise Linux ES 3、4」です。
- WebOTX Web Edition V6.1~V6.5
- WebOTX Standard-J Edition V6.1~V6.5
- WebOTX Standard Edition V6.1~V6.5
- WebOTX Enterprise Edition V6.1~V6.5
- WebOTX Application Server Web Edition V7.1~V7.11
- WebOTX Application Server Standard-J Edition V7.1~V7.11
- WebOTX Application Server Standard Edition V7.1~V7.11
- WebOTX Application Server Enterprise Edition V7.1~V7.11
- WebOTX Application Server Web Edition V8.1~V8.12
- WebOTX Application Server Standard-J Edition V8.1~V8.12
(注意)WebOTXのバージョンによってサポートするRed Hat Enterprise Linuxバージョンが異なります。
影響を受ける関連ソフトウェア製品は次のとおりです。下記の製品は、J2EE Deployment APIを使っているため影響を受けます。
- WebOTX業務デプロイメント(別名称でリリースされている「MCOne」も対象)
3. 問題の詳細
Red Hat Enterprise Linuxのcron(8)にデフォルトで組み込まれているtmpwatchスクリプトが動作することによって、「/tmp」と「/var/tmp」配下に配置された、一定期間読み込まれていないファイルが自動的に削除されます。
WebOTX製品においては、「1. 概要」で示した機能が動作に必要なディレクトリを「/tmp」に配置することに関連します。このWebOTX動作に必要なディレクトリがtmpwatchスクリプトによって削除された後、WebOTXが該当ディレクトリを参照する際に問題が生じます。詳細は「3.1 WebOTX製品への影響」で後述します。
デフォルトでは、「/etc/crontab」の中に定義された「02 4 * * * root run-parts /etc/cron.daily」にしたがって、毎日、4時2分に「/etc/cron.daily」配下のスクリプトが実行されます。その際に実行される「/etc/cron.daily/tmpwatch」スクリプトが、本問題を引き起こす原因となります。
tmpwatchスクリプトの内容は次のとおりです。
/usr/sbin/tmpwatch -x /tmp/.X11-unix \
-x /tmp/.XIM-unix -x /tmp/.font-unix \
-x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp
/usr/sbin/tmpwatch 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch -f 720 $d
fi
done
「/usr/sbin/tmpwatch」コマンド・ラインが実行されることで、下記のディレクトリ配下がtmpwatchコマンドの機能によって検査されます。その結果、コマンド引数に指定された時間、アクセスされずに残っているファイルが削除されます。
240時間 (10日) 以内に読み込みが行われなかった場合に削除対象のファイルを検査するディレクトリ
- /tmp
720時間 (30日) 以内に読み込みが行われなかった場合に削除対象のファイルを検査するディレクトリ
- /var/tmp
- /var/cache/man/cat
- /var/cache/man/X11R6/cat
- /var/cache/man/local/cat
- /var/catman/man/cat
- /var/catman/man/X11R6/cat
- /var/catman/man/local/cat
ただし、tmpwatchコマンド引数「-x」で指定された下記のディレクトリ配下は削除対象から除外されます。
- /tmp/.X11-unix
- /tmp/.XIM-unix
- /tmp/.font-unix
- /tmp/.ICE-unix
- /tmp/.Test-unix
3.1. WebOTX製品への影響
WebOTX製品では、「1. 概要」で説明した機能が「/tmp」配下に定義情報を配置します。
/tmp/webotxtemp<ドメイン名>server<13桁の乱数>/
(ドメイン名「domain1」の例)
/tmp/webotxtempdomain1server1228498761869/
このディレクトリはWebOTXのドメイン単位に存在します。そして、WebOTXがドメインを起動する時に作成し、停止時に削除します。
本問題の影響を受けると、次のエラー・メッセージが返ります。
/tmp/webotxtemp<ドメイン名>server<13桁の乱数>/
<アプリケーション・グループ名>-<プロセス・グループ>/
<配備するモジュール名> (No such file or directory)
(WebOTX業務デプロイメントを使って、
・「domain1」ドメイン内の、
・アプリケーション・グループ「APG」、
・プロセス・グループ「PG」に、
・「cart.ear」モジュール
を配備した場合の例)
/tmp/webotxtempdomain1server1228498761869/APG-PG/cart.ear
(No such file or directory)
この問題に抵触すると、WebOTXのドメイン稼働中は全てのJ2EE Deployment API経由によるアプリケーション配備操作に対してエラーとなります。他の配備手段、例えば、WebOTX運用管理コマンド「otxadmin」や統合運用管理ツールなどを用いた場合には問題に抵触しません。
3.2. 現象の詳細
前節で説明した問題は、次の流れによって引き起こされます。
-
WebOTXアプリケーションサーバを起動
-
WebOTXがドメインを起動する過程で、「/tmp/webotxtemp<ドメイン名>server<13桁の乱数>/」ディレクトリを作成
-
WebOTXアプリケーションサーバにJ2EE Deployment API経由でアプリケーション・モジュールを配備
-
240時間 (10日) 以上、配備操作を行わない (10日以上経過)
-
Red Hat Enterprise Linuxのcron(8)における、tmpwatchスクリプトが動作することにより、「2.」で作成したディレクトリが削除される
-
「3.」と同じ方法でモジュールを配備 → 「2.」のディレクトリが存在しないため、配備実行エラーが発生する。
4. 対処方法
現在のシステムにおいて、WebOTXのドメインを再起動することが可能な場合は、ドメインを停止して、4.2節の対処法を実施してください。対処後にドメインを起動すれば処置は完了します。
ドメインを停止することができない場合は、4.1節からの対処法を参照の上、対策を検討するようにお願いします。
4.1 既に「/tmp/webotxtemp...」ディレクトリが削除されている場合
WebOTXのドメインを10日以上稼動している場合は、まず、「/tmp/webotxtemp<ドメイン名>server<13桁の乱数>/」ディレクトリの有無を確認してください。存在しない場合、手動で該当ディレクトリを作成することで復旧します。
ただし、手動で作成すべきディレクトリ名を知るためには、一旦、配備操作を行って、得られたエラー・メッセージから確認するしかありません。エラーは発生しますが、WebOTXアプリケーションサーバやドメインの状態には何も影響を及ぼしません。
4.2 問題を未然に防ぐ対処法
最も簡単な防止法は、cron(8)のタスク一覧からtmpwatchスクリプトを取り除くことです。この方法を適用できない場合は、次のいずれかの対処を行ってください。
[1]WebOTXが必要とするディレクトリをtmpwatchスクリプトの削除対象外となるようにスクリプトを修正する
修正するスクリプトは3章で示した、毎日実行される「/etc/cron.daily/tmpwatch」です。スクリプトの先頭行にWebOTXが必要とするディレクトリのタイムスタンプを更新する処理を挿入します。そうすることで、10日以上アクセスがない状態を作らないようにします。
/usr/bin/find /tmp/webotxtemp* \
-type d -exec /bin/touch {} \;
/usr/sbin/tmpwatch -x /tmp/.X11-unix \
-x /tmp/.XIM-unix -x /tmp/.font-unix \
-x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp
(以下、省略)
この対処を実施した後に新しいバージョンの「tmpwatch RPMパッケージ」(*)で更新すると、「/etc/cron.daily/tmpwatch」スクリプトがRPMパッケージ内のもので上書きされます。その場合は、再度上記の修正を実施しなければならないことに注意してください。
(*)「rpm -q tmpwatch」を実行することで、現在のtmpwatch RPMパッケージのバージョンを確認できます。
[2]WebOTXのドメインが使用する一時ディレクトリを「/tmp」以外に設定する
WebOTXのドメインはJavaプロセスです。したがって、ドメインのJava VMオプションに対して、Javaが管理する一時ファイル・ディレクトリに関するシステム・プロパティ「java.io.tmpdir」を明示的に「/tmp」以外へ指定することで、tmpwatchスクリプトの削除対象とならないようにします。
ドメインのJava VMオプションは、「/opt/WebOTX/domains/<ドメイン名>/config/domain.xml」ファイルに定義されています。「java.io.tmpdir」システム・プロパティは、このdomain.xmlファイル内の「<jvm-options>」要素で定義します。
以下に、WebOTX運用管理コマンド「/opt/WebOTX/bin/otxadmin」を用いて一時ファイル・ディレクトリを「/home/tmp」に定義する例を示します。
/opt/WebOTX/bin/otxadmin login --user <ドメイン管理ユーザ名>
--password <ドメイン管理ユーザパスワード>
--port <ドメイン管理ポート>
--host <ホスト名>
> create-jvm-options -Djava.io.tmpdir=/home/tmp
Command create-jvm-options executed successfully.
> logout
(注意)この方式を採用する場合は、ドメインを再起動する必要があります。設定した「java.io.tmpdir」システム・プロパティは、ドメイン起動時に読み込まれて、ドメイン動作に反映されます。したがって、稼働中にこの定義を設定しても現在稼働中のドメインには認識されません。
WebOTX製品は、[2]のJavaシステム・プロパティを定義する対処法を推奨しています。
5. 更新履歴
- 2009/02/16