ワークユニットで起動したアプリケーションが動作する作業ディレクトリ(カレントディレクトリ)を指定することができます。
カレントディレクトリにより、ワークユニット配下で動作するアプリケーションはそれぞれ異なった作業ディレクトリで動作することが可能となります。
カレントディレクトリの世代管理機能
ワークユニットのカレントディレクトリのバックアップを最大5世代残すことができます。
バックアップはワークユニットの起動時に作成され、ワークユニット定義で指定された世代数まで残ります。前回起動時に作成されたワークユニット名のディレクトリが、「ワークユニット名.old1」としてバックアップされます。「ワークユニット名.old1」は「ワークユニット名.old2」としてバックアップされ、指定された世代数「n」の「ワークユニット名.oldn」までバックアップが作成されます。「ワークユニット名.oldn」がすでに存在する場合は、「ワークユニット名.oldn」を削除し、一つ前の数字のディレクトリが「ワークユニット名.oldn」として残されます。定義の詳細については「A.3.3.25 Number of Revision Directories:カレントディレクトリの退避世代数」を参照してください。
ワークユニット再起動後もカレントディレクトリ配下の標準出力ファイル(stdout)、標準エラー出力ファイル(stderr)、(Solaris版/Linux版ではcoreファイル)等が保存されるため、トラブル発生後、従来はワークユニットを再起動する前に、調査資料としてカレントディレクトリ配下のファイルを採取する必要がありましたが、本機能を使用することにより、業務の復旧を優先し、ワークユニットの再起動を行った後に資料を採取することができます。また、トラブル発生から時間が経過していても調査情報を容易に入手することが可能となります。
注意
バックアップするカレントディレクトリの世代数の省略値は1です。そのため、ワークユニットのカレントディレクトリで指定したディレクトリ配下には、必ず前回起動時に作成されたディレクトリとファイルが残ります。
カレントディレクトリで指定されたディレクトリのディスク領域は、出力されるファイルのサイズを考慮し、十分な空き領域を確保してください。
カレントディレクトリに指定するディスクの容量は、指定された世代数に合わせて十分な容量を見積もってください。
CORBAワークユニットの場合、ワークユニット定義の環境変数に、旧バージョンの互換機能である、「EXTP_CURRENTDIR_HISTORY=YES」が設定されている場合は、カレントディレクトリのバックアップは5世代残ります。
拡張システムでは以下のカレントディレクトリの名前でバックアップされます。
ワークユニット名.システム名.old*
CORBAワークユニットの指定形式
プラットフォーム | システム | 指定形式 (注1) |
---|---|---|
Windows(R) | - | xxx\yyy\zzz |
Solaris | デフォルトシステム | xxx/yyy/zzz |
拡張システム | xxx/yyy.システム名/zzz |
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から公開されている情報を参照してください。
Java言語の場合、stdoutファイルおよびstderrファイルは作成されますが、ファイルにデータは出力されません。
COBOLアプリケーションで、標準出力、標準エラー出力にデータを出力する場合、主プログラムの翻訳オプションに「MAIN(MAIN) 」を指定してください。なお、翻訳時に翻訳オプション「SSOUT(環境変数情報名)」を指定し、ワークユニット定義の[Control Option]セクションまたは[Application Program]セクションのEnvironment Variable:ステートメントで環境変数情報名にデータ出力先のファイル名を指定することにより標準出力のデータ出力先を変更することが可能です。また、環境変数情報「@MessOutFile」を指定することで標準エラー出力のデータ出力先を変更することが可能です。翻訳オプション「SSOUT(環境変数情報名)」および環境変数情報「@MessOutFile」についての詳細はCOBOLのマニュアルを参照してください。
UNIXの場合、アプリケーションが異常終了しcoreファイルを出力した場合、それぞれのカレントディレクトリ配下に出力されます。
Java言語の場合、stdoutファイルおよびstderrファイルは作成されますが、ファイルにデータは出力されません。
coreファイル出力先は、OS提供のcoreadmコマンドを使用することで変更可能です。
注意
Java言語でファイルにデータを出力する場合、使用者が標準出力、標準エラー出力をファイルに割り当てるようにプログラミングする必要があります。
以下のメソッドを使用することで可能です。
標準出力の場合
java.lang.SystemクラスのsetOut()メソッド
標準エラー出力の場合
java.lang.SystemクラスのsetErr()メソッド
なお、-verbose:gcオプションでGC情報を出力する場合、-Xloggc:fileオプションで出力ファイルを指定可能です。
CORBAアプリケーションで標準出力および標準エラー出力をstdoutファイル、stderrファイルに割り当てたくない場合、「付録A ワークユニット定義」の[Control Option]セクションまたは[Application Program]セクションのEnvironment Variable:ステートメントに以下の環境変数を指定してください。stdoutファイルおよびstderrファイルは出力されなくなります。
INTERSTAGE_WU_STDOUT_REDIRECTION = OFF
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ファイルは、ワークユニット起動中にファイル切り替えを行いません。そのため、アプリケーションのログ情報などを大量に出力した場合は、運用中にファイル容量が増加しディスク領域が不足する可能性があります。
アプリケーションで常時ログなど大量に出力する場合は、世代管理機能を持つログ出力機能を使用してください。
カレントディレクトリはワークユニット定義で設定します。ワークユニット定義の登録は、コマンドを使用する方法と、Interstage管理コンソールを使用する方法があります。
ワークユニット定義の「Current Directory(カレントディレクトリ)」と「Number of Revision Directories(カレントディレクトリの退避世代数)」に設定します。以下に定義登録の実行例を示します。なお、ワークユニット定義の詳細は「付録A ワークユニット定義」を参照してください。
例
ワークユニット定義の登録例
ワークユニット定義
[Control Option] Current Directory:/log_dir Number of Revision Directories:1
isaddwudefコマンドでワークユニット名を指定して登録します。
isaddwudef -o ISSAMPLE1
Interstage管理コンソールにログインします。
Interstage管理コンソールの
[Interstage管理コンソール] > [Interstage Application Server] > [システム] > [ワークユニット]の[新規作成]タブ
または、
[Interstage管理コンソール] > [Interstage Application Server] > [システム] > [ワークユニット] > [ワークユニット名] > の[環境設定]タブ
で[ワークユニット設定]の「アプリケーション動作カレントディレクトリ」と「退避するカレントディレクトリの世代数」に設定してください。
Interstage管理コンソールを使用する場合は、「Intestage管理コンソールのヘルプ」も参照してください。