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 を使っているため影響を受けます WebOTX 業務デプロイメント ( 別名称でリリースされている MCOne も対象 ) - 1-
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 - 2-
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) と同じ方法でモジュールを配備 (2) のディレクトリが存在しないため 配備実行エラーが発生する - 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> 1 rpm q tmpwatch を実行することで 現在の tmpwatch RPM パッケージのバージョンを確認できます - 4-
要素で定義します 以下に 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-