6.2.3 間接起動によるプロセス監視
この方法の場合,プロセス監視定義ファイルへの設定のほか,プロセス起動用,プロセスID取得用,およびプロセス停止用コマンド(バッチファイル,シェルスクリプトでも可)を用意する必要があります。
- 〈この項の構成〉
-
(1) 監視方法
間接起動によるプロセス監視方法の概要を次の図に示します。
-
ADMデーモンがプロセス監視定義ファイルを読み込みます。
-
プロセス監視定義ファイルに設定されたプロセス起動用コマンドを発行します。
-
プロセス監視定義ファイルに設定されたプロセスID取得用コマンドを発行します。
-
取得したプロセスIDを基に,監視対象に参加させます。
(2) 監視対象プロセスの起動方法
プロセス監視定義ファイルに設定されたプロセス起動用コマンドを基に監視対象プロセスを起動します。プロセス起動用コマンドは監視対象にはなりません。複数のプロセスが一つのプロセス起動用コマンドで起動することがあり,一つのプロセス起動用コマンドで起動したプロセスを,一つのプロセスグループとして扱います。
ユーザは,目的の監視対象プロセスを起動するプロセス起動用コマンドをあらかじめ用意する必要があります。
(3) 監視対象プロセスの起動のタイミング
次のどちらかをプロセス監視定義ファイルで選択できます。
-
admstartコマンド入力時
TPBrokerオンライン開始時に同時に監視対象プロセスを起動します。
-
admstartprcコマンド入力時
TPBrokerオンライン開始後に任意に監視対象プロセスを起動します。
(4) 監視対象プロセスの起動成功の判断基準
プロセスID取得用コマンドを発行し,プロセスIDを取得できた場合に起動成功と判断します。このコマンドが正常終了して取得できた複数のプロセスをプロセスグループとして扱います。
ユーザは,プロセスID取得用コマンドをあらかじめ用意しておく必要があります。プロセスID取得用コマンドがプロセス監視定義ファイルに設定されていない場合は,プロセス起動用コマンドとプロセス停止用コマンドによるプロセスの起動および停止だけを行い,プロセスの監視はしません。
(5) 監視対象プロセスの起動失敗時のアクション
プロセス監視定義ファイルに設定された監視対象プロセスに実行権限がないなどの理由でプロセスを起動できない場合,次のどれか一つをプロセス監視定義ファイルで選択できます。
-
TPBrokerの運用支援機能を終了させます。
-
起動に失敗したプロセスを再起動します。
-
何もしないで処理を続行します。
(6) 監視区間
プロセス監視定義ファイルに設定したプロセスID取得用コマンドでプロセスIDを取得してから,プロセス監視定義ファイルに設定したプロセス停止用コマンドを発行するまでの間です。
(7) 監視対象プロセス異常終了時のアクション
次のどれか一つをプロセス監視定義ファイルで選択できます。
-
TPBrokerの運用支援機能を終了させます。
-
異常終了したプロセスを再起動します。
-
何もしないで処理を続行します。
-
コマンドなどのプロセスを起動します。
このコマンドはプロセス監視定義ファイルでユーザが設定します。また,このプロセスは監視対象にはなりません。
プロセスが異常終了した場合,そのプロセスと同一のプロセスグループ内のすべてのプロセスを監視対象から外し,停止します。
ここで,プロセスグループに1つのプロセスしか含まれない場合でも,以下のアクションが発生します。
-
強制停止コマンドが定義されている場合,強制停止コマンドを実行します。
-
強制停止コマンドが定義されていない場合,かつ正常停止コマンドが定義されている場合,正常停止コマンドを実行します。
-
強制停止コマンド,正常停止コマンド共に定義されていない場合,プロセスグループ内のダウンした以外のプロセスをシステムコール(UNIXの場合はkill(),Windowsの場合はTerminateProcess())で直接プロセスを停止します。
(8) 連続異常終了についての考慮
起動したプロセスが異常終了を繰り返す場合を考慮して,一定時間内(10分間)に異常終了する回数の最大値をプロセス監視定義ファイルに設定できます。TPBrokerは,異常終了検知後にそのプロセスを再起動することになっている場合でも,プロセスの連続異常終了回数が最大値に達しているときは,プロセスを再起動しません。
(9) 監視対象プロセスの停止方法
プロセス監視定義ファイルにプロセス停止用コマンドを設定している場合は,プロセス停止用コマンドを起動します。プロセス停止用コマンドを設定していない場合は,システムコール(UNIXの場合はkill(),Windowsの場合はTerminateProcess())で直接プロセスを停止させます。
(10) 監視対象プロセスの停止のタイミング
次のどちらかをプロセス監視定義ファイルで選択できます。
-
admstopコマンド入力時
監視中の各プロセスを停止します。
-
admstopprcコマンド入力時
指定したプロセスを停止します。
(11) 間接起動によるプロセス監視機能が異常終了したときの考慮
ADMデーモンはWindows版の場合はWindowsのサービスとして,UNIX版の場合はinittabに登録されています。ADMデーモンが異常終了した場合,ADMデーモンは自動的に再開始されます。
UNIX版の場合,inittabから起動されたADMデーモンが5分間に11回連続で異常終了すると,プロセス監視機能は使用できなくなります。
監視対象プロセス異常終了時のアクションで「TPBrokerの運用支援機能を終了させる」を選択した場合,そのほかの監視中のプロセスは停止されません。ADMデーモンが再開始したときに,再び監視対象プロセスに参加させます。この場合は,起動中の監視対象プロセスはADMデーモンの子プロセスではありません。そのほかのプロセスも異常終了している場合は,プロセスを再起動します。
(12) プロセス起動用コマンド
プロセス起動用コマンドを作成するには,次に示す条件を満たす必要があります。
-
プロセス起動用コマンドの終了時には,プロセス停止用コマンドが実行可能状態になっている。
-
プロセス起動用コマンドの終了時には,全監視対象プロセスが起動完了している。
ADMデーモンでは,指定されたプロセス起動用コマンドの終了を待ちます。
(13) プロセス停止用コマンド
プロセス停止用コマンドを作成するには,次に示す条件を満たす必要があります。
-
プロセス停止用コマンドの終了時には,プロセス起動用コマンドが実行可能状態になっている。
-
プロセス停止用コマンドの終了時には,プロセス起動用コマンドで起動したプロセスが停止している。
-
同一の識別子で監視対象になっているプロセスだけを停止する。
(14) プロセス強制停止用コマンド
プロセス強制停止用コマンドを作成するには,次に示す条件を満たす必要があります。
-
プロセス強制停止用コマンドの終了時には,プロセス起動用コマンドが実行可能状態になっている。
-
監視対象プロセスがない状態で実行しても問題ない。
-
同一の識別子で監視対象になっているプロセスだけを停止する。
(15) プロセスID取得用コマンド
プロセスID取得用コマンドを作成するには,次に示す条件を満たす必要があります。次の条件を満たしていないと,監視対象プロセスのプロセスIDを取得できなくなり,正常にプロセス監視ができない場合があります。
-
プロセス起動用コマンドで起動したプロセスのプロセスIDを標準出力に出力する。
-
出力フォーマットは次のようにする。
各行の最後には「\n」が付くようにします。
(16) 注意事項
-
プロセスID取得用コマンドが未設定の場合は,プロセスの監視は行いません。また,この場合,プロセス停止用コマンドは必ず指定してください。
-
プロセスID取得用コマンドの指定がある場合は,プロセス停止用コマンドの指定がなくてもかまいません。ただし,この場合はシステムコール※で直接プロセスを停止させます。
-
間接起動によるプロセス監視によって,一つの識別子で100個までのプロセスを監視できます。プロセスID取得用コマンドを発行した結果,100個を超えるプロセスIDを取得した場合,メッセージを出力し起動したプロセスを停止します。停止は,強制正常停止用コマンドを発行します。強制正常停止用コマンドが設定されていない場合は,システムコール※で直接プロセスを停止させます。
-
間接起動によってプロセスを起動および監視するときに,監視対象とするプロセスと同じ名前のプロセスがすでに存在する場合,プロセスID取得用コマンドの仕様によっては,すでに起動されているプロセスも監視対象になることがあります。プロセスID取得用コマンドでは,間接起動によって起動したプロセスのプロセスIDだけを取得するようにしてください。
-
プロセス監視定義ファイルに設定されたプロセス停止用コマンドで監視対象プロセスを停止できなかった場合,監視対象プロセスに対するプロセス監視を終了し,一定時間(約20秒)経過後,監視対象プロセスをシステムコール※で強制終了させます。このとき,メッセージKFCB29186-Wがログファイルおよびシステムログに出力されます。
-
プロセス監視定義ファイルに設定されたプロセスID取得用コマンドおよびプロセス停止用コマンドの終了は,プロセス停止用コマンドのタイムアウト時間(プロセス停止用コマンドのタイムアウト値を設定しない場合は5分間)待ちます。それでも停止しない場合,コマンドプロセスをシステムコール※で強制停止させます。
-
UNIX版の場合,監視対象プロセスやコマンドプロセスをkill()システムコールで停止させるときには,SIGTERMを使用します。SIGTERMで停止しない場合は,SIGKILLを使用して強制停止させます。
-
UNIX版の場合,プロセス監視定義ファイルに設定する監視対象プロセスやコマンドがシェルスクリプトのときは,必ず先頭の2バイトに文字「#!」を記述してください。「#!」を記述しない場合,シェルスクリプトの起動に失敗します。
- 注※
-
UNIXの場合のシステムコールはkill(),Windowsの場合のシステムコールはTerminateProcess()です。