Red Hat Enterprise Linux の cron(8)デーモンにデフォルト定義された
tmpwatch 命令の動作による、WebOTX のトラブル対処方法
2009 年 2 月 NEC 第二システムソフトウェア事業部
1. 概要
Red Hat Enterprise Linux では、OS インストール後の初期状態において、cron(8)デーモンによって実行される命令 が複数定義されます。その中の1 つに tmpwatch コマンドの機能を使った、ある一定期間アクセスされていないファイ ルを自動的に削除する命令(スクリプト)があります。
この機能が動作することによって、WebOTX アプリケーションサーバ製品の一部の機能で問題が生じます。 J2EE Deployment API 利用によるアプリケーションの配備・配備解除
J2EE Deployment API を使ったソフトウェア製品や業務システムは注意が必要です。
2. 対象となる製品
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
対象となるLinux プラットフォームは、上記の製品がサポートする以下の OS です。 Red Hat Enterprise Linux AS 3、4
Red Hat Enterprise Linux ES 3、4
(注意) WebOTX のバージョンによってサポートする Red Hat Enterprise Linux バージョンが異なります。
影響を受ける関連ソフトウェア製品は次のとおりです。下記の製品は、J2EE Deployment API を使っているため影響 を受けます。
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
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 d irectory)
この問題に抵触すると、WebOTX のドメイン稼働中は全ての J2EE Deployment API 経由によるアプリケーション配 備操作に対してエラーとなります。他の配備手段、例えば、WebOTX 運用管理コマンド「otxadmin」や統合運用管理ツ ールなどを用いた場合には問題に抵触しません。 3.2 現象の詳細 前節で説明した問題は、次の流れによって引き起こされます。 1. WebOTX アプリケーションサーバを起動 2. WebOTX がドメインを起動する過程で、「/tmp/webotxtemp<ドメイン名>server<13 桁の乱数>/」ディレ クトリを作成
3. WebOTX アプリケーションサーバに J2EE Deployment API 経由でアプリケーション・モジュールを配備 4. 240 時間 (10 日) 以上、配備操作を行わない (10 日以上経過)
5. Red Hat Enterprise Linux の cron(8)における、tmpwatch スクリプトが動作することにより、「(2)」で作成し たディレクトリが削除される
6. 「(3)」と同じ方法でモジュールを配備
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パッ ケ ー ジ 」 1 で 更 新 す る と 、 「/etc/cron.daily/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 システム・プロパティを定義する対処法を推奨しています。