ページの先頭行へ戻る
Interstage Application Server OLTPサーバ運用ガイド
Interstage

I.6 カレントディレクトリ

ワークユニットで起動したアプリケーションが動作する作業ディレクトリ(カレントディレクトリ)を指定することができます。
カレントディレクトリにより、ワークユニット配下で動作するアプリケーションはそれぞれ異なった作業ディレクトリで動作することが可能となります。


カレントディレクトリの世代管理機能

ワークユニットのカレントディレクトリのバックアップを最大5世代残すことができます。

バックアップはワークユニットの起動時に作成され、ワークユニット定義で指定された世代数まで残ります。前回起動時に作成されたワークユニット名のディレクトリが、「ワークユニット名.old1」としてバックアップされます。「ワークユニット名.old1」は「ワークユニット名.old2」としてバックアップされ、指定された世代数「n」の「ワークユニット名.oldn」までバックアップが作成されます。「ワークユニット名.oldn」がすでに存在する場合は、「ワークユニット名.oldn」を削除し、一つ前の数字のディレクトリが「ワークユニット名.oldn」として残されます。定義の詳細については「A.3.3.25 Number of Revision Directories:カレントディレクトリの退避世代数」を参照してください。
ワークユニット再起動後もカレントディレクトリ配下の標準出力ファイル(stdout)、標準エラー出力ファイル(stderr)、(Solaris版/Linux版ではcoreファイル)等が保存されるため、トラブル発生後、従来はワークユニットを再起動する前に、調査資料としてカレントディレクトリ配下のファイルを採取する必要がありましたが、本機能を使用することにより、業務の復旧を優先し、ワークユニットの再起動を行った後に資料を採取することができます。また、トラブル発生から時間が経過していても調査情報を容易に入手することが可能となります。


注意

  • バックアップするカレントディレクトリの世代数の省略値は1です。そのため、ワークユニットのカレントディレクトリで指定したディレクトリ配下には、必ず前回起動時に作成されたディレクトリとファイルが残ります。
    カレントディレクトリで指定されたディレクトリのディスク領域は、出力されるファイルのサイズを考慮し、十分な空き領域を確保してください。

  • カレントディレクトリに指定するディスクの容量は、指定された世代数に合わせて十分な容量を見積もってください。

  • 拡張システムでは以下のカレントディレクトリの名前でバックアップされます。

    ワークユニット名.システム名.old*


トランザクションアプリケーションのワークユニットの指定形式

プラットフォーム

システム

指定形式 (1)

Windows(R)

xxx\yyy\zzz

Solaris
Linux

デフォルトシステム

xxx/yyy/zzz

拡張システム

xxx/yyy.システム名/zzz

1)

xxx:ワークユニット定義で指定されたディレクトリ
yyy:当該ワークユニット名
zzz:アプリケーションの実行プロセスID


標準出力には、stdoutファイルが割り当てられています。サーバアプリケーションで標準出力にデータを出力した場合に、出力先として使用されます。
標準エラー出力には、stderrファイルが割り当てられています。サーバアプリケーションで標準エラー出力にデータを出力した場合に、出力先として使用されます。
OSの標準入出力ライブラリの仕様により、標準出力および標準エラー出力に出力したデータは一旦標準入出力ライブラリにバッファリングされます。
バッファリングされたデータを確実にstdout、stderrファイルに出力させるためには標準出力および標準エラー出力に対してフラッシュを行う必要があります。
たとえばC言語の場合は、fflush(stdout)、fflush(stderr)を発行してください。フラッシュを行わない場合は標準入出力ライブラリによってバッファリングされたデータがフラッシュされるまでstdout、stderrファイルにデータが出力されません。



C++言語で、入出力ストリーム(cout, cerr)を使用して標準出力、標準エラー出力にデータを出力する場合、標準C++ iostreamライブラリを使用してください。古いiostreamライブラリを使用する場合は、使用者が標準出力、標準エラー出力をファイルに割り当てるようにプログラミングする必要があります。標準C++ iostreamライブラリを使用する場合は、<iostream>などの拡張子.hが付いてないヘッダファイルを使用します。古いiostreamライブラリと標準C++ iostreamライブラリの違いについてはMSDNなどのMicrosoft Corporationから公開されている情報を参照してください。
COBOL言語の場合、stdoutファイルおよびstderrファイルは作成されますが、ファイルにデータは出力されません。
COBOLアプリケーションでDISPLAY文を使用している場合は、翻訳時に翻訳オプション「SSOUT(環境変数情報名)」を指定し、ワークユニット定義の[Control Option]セクションまたは[Application Program]セクションのEnvironment Variable:ステートメントで環境変数情報名にデータ出力先のファイル名を指定してください。



UNIXの場合、アプリケーションが異常終了しcoreファイルを出力した場合、それぞれのカレントディレクトリ配下に出力されます。


coreファイル出力先は、OS提供のcoreadmコマンドを使用することで変更可能です。


Microsoft(R) Visual C++ .NETまたはMicrosoft(R) Visual C++ 2005を使用して、CORBAアプリケーションおよびトランザクションアプリケーションを作成する場合の注意点

Microsoft(R) Visual C++ .NETまたはMicrosoft(R) Visual C++ 2005を使用してビルドされたアプリケーションでは、標準出力または標準エラー出力に向けて出力されたデータが、カレントフォルダ配下のstdoutファイルまたはstderrファイルに出力されません。
これを回避し正しく出力するためには、アプリケーションにおいて以下の対処を実施してください。

プログラムの先頭に以下のコードを追加してください。 (1)

freopen("stdout", "w", stdout);
freopen("stderr", "w", stderr);

1) Microsoft(R) Visual C++ 2005を使用してビルドした場合、「warning C4996: 'freopen' が古い形式として宣言されました。」という警告が出力される場合がありますが、動作上の問題はありません。


標準出力、標準エラー出力の使用方法

アプリケーションの標準出力、標準エラー出力は、それぞれstdout、stderrファイルに割り当てられます。
stdoutファイル、stderrファイルは、ワークユニット起動中にファイル切り替えを行いません。そのため、アプリケーションのログ情報などを大量に出力した場合は、運用中にファイル容量が増加しディスク領域が不足する可能性があります。
アプリケーションで常時ログなど大量に出力する場合は、世代管理機能を持つログ出力機能を使用してください。


カレントディレクトリの削除

サーバアプリケーションの停止時に、アプリケーションのカレントディレクトリを自動削除するよう指定できます。
ワークユニットの停止、ワークユニットの活性変更およびプロセス多重度変更により、サーバアプリケーションが停止する場合にカレントディレクトリを削除します。これにより、停止したサーバアプリケーションプロセスのカレントディレクトリが残り、ディスクスペースが圧迫されることを防止できます。

ただし、カレントディレクトリ配下にファイルサイズが1以上のファイルが存在する場合、カレントディレクトリは削除されません。ファイルが必要であるかどうかを判断し、手作業で削除してください。また、この場合もアプリケーション再起動時には、カレントディレクトリを削除し、再作成されます。


定義方法

ワークユニット定義の「Current Directory(カレントディレクトリ)」、「Remove Directory(APM(サーバアプリケーション)のカレントフォルダ削除の有無)」、「Number of Revision Directories(カレントディレトリの退避世代数)」に設定します。以下に定義登録の実行例を示します。なお、ワークユニット定義の詳細は「付録A ワークユニット定義」を参照してください。


ワークユニット定義の登録

ワークユニット定義

[Control Option]
Current Directory:/log_dir
Remove Directory:YES
Number of Revision Directories:1

isaddwudefコマンドでワークユニット名を指定して登録します。

isaddwudef -o ISSAMPLE1