SRC オブジェクト

システム・リソース・コントローラー (SRC) は、 次の 3 つのオブジェクト・クラスを定義し、管理します。

これらのオブジェクト・クラスが一緒になって、SRC が機能を実行するドメインを表します。 事前定義済みのオブジェクト・クラス・ディスクリプターのセットは、SRC がサポートできる サブシステム構成のセットで成り立っています。

注: SRC サブシステム・オブジェクト・クラスのみが必要です。 サブサーバー・タイプおよび通知の各オブジェクト・クラスを使用するかどうかは、 サブシステムによって決まります。

サブシステム・オブジェクト・クラス

サブシステム・オブジェクト・クラスには、すべての SRC サブシステムについてのディスクリプターが入っています。 サブシステムが SRC に認識されるためには、事前にサブシステムがこのクラスに 構成されている必要があります。

Subsystem オブジェクト・クラスのディスクリプターは、 /usr/include/sys/srcobj.h ファイルの SRC サブシステム 構造に定義されています。 「サブシステム・オブジェクト記述子とデフォルト値」テーブルには、サブシステム記述子と、各記述子に関連付けられた mkssys (システム) および CHSSSYS コマンド・フラグの簡略形式の図が表示されます。

表 1. サブシステム・オブジェクト・ディスクリプターとデフォルト値
記述子 デフォルト値 flags
サブシステム名   -s
サブシステム・コマンドへのパス   -p
コマンド引数   -a
実行優先順位 20 -E
複数インスタンス いいえ -Q -q
ユーザー ID   -u
同義語名 (キー)   -t
始動アクション ONCE -O -R
標準入力 /dev/console -i
stdout /dev/console -o
標準エラー出力 /dev/console -e
通信タイプ ソケット -K -I -S
サブシステム・メッセージ・タイプ   -m
通信 IPC キュー・キー   -l
グループ名   -G
SIGNORM シグナル   -n
SIGFORCE シグナル   -f
表示 はい -D -d
待ち時間 20 秒 -w
監査 ID    

サブシステム・オブジェクト・ディスクリプターは、次のように定義されています。

オブジェクト・ディスクリプター 定義
サブシステム名 サブシステム・オブジェクトの名前を指定します。 名前は、null ターミネーターを含めて 30 バイト (1 バイト文字で 29 文字、または マルチバイト文字セットで 14 文字) を超えるものは使用できません。 このディスクリプターは、POSIX 準拠でなければなりません。 このフィールドは必須です。
サブシステム・コマンドパス サブシステム始動コマンドで実行されるプログラムの絶対パス名を指定します。 パス名は、null ターミネーターを含めて 200 バイト (1 バイト文字で 199 文字、 またはマルチバイト文字セットで 99 文字) を超えるものは使用できません。 パス名は、POSIX 準拠でなければなりません。 このフィールドは必須です。
コマンド引数 サブシステムを始動するコマンドに渡さなければならない引数を指定します。 引数は、null ターミネーターを含めて 200 バイト (1 バイト文字で 199 文字、 またはマルチバイト文字セットで 99 文字) を超えるものは使用できません。 引数は、シェルが使用するのと同じ規則に従って、 srcmstr デーモンによって構文解析されます。 例えば、引用符付き文字列は単一の引数として渡され、 引用符付き文字列の外側にあるブランクは引数を区切ります。
実行優先順位 サブシステム実行の処理の優先順位を指定します。 srcmstr デーモンによって始動されたサブシステムは、 この優先順位を用いて実行されます。 デフォルト値は 20 です。
複数インスタンス 一度に実行できるサブシステムのインスタンスの数を指定します。 NO (-Q フラグ) という値は、一度に実行できるサブシステムの インスタンスは 1 つだけであることを指定します。 サブシステムが既に実行されている場合に、そのサブシステムを始動しようとすると、 その試みは失敗します。同様に、同一の IPC メッセージ・キュー・キー上にあるサブシステムを 始動しようとした場合も失敗します。 YES (-q フラグ) という値は、複数のサブシステムが 同一の IPC メッセージ・キューを使用できること、また同一のサブシステムの 複数インスタンスも存在可能であることを指定します。 デフォルト値は NO です。
ユーザー ID サブシステムがどのユーザー ID (数値) の下で実行されるのかを指定します。 0 という値は、root ユーザーを示します。 このフィールドは必須です。
シノニム名 サブシステムの代替名として使用する文字列を指定します。 この文字列には、null ターミネーターを含めて 30 バイト (1 バイト文字で 29 文字、 またはマルチバイト文字セットで 14 文字) を超えるものは使用できません。 このフィールドはオプションです。
始動アクション 異常終了後に、srcmstr デーモンがサブシステムを再始動する必要があるかどうかを指定します。 RESPAWN という値 (-R フラグ) は、srcmstr デーモン がサブシステムを再始動する必要があることを指定します。 ONCE という値 ( -O フラグ) は、srcmstr デーモンが、 障害が起こったシステムの再始動を試みる必要のないことを指定します。 指定された待ち時間内に、2 回の再始動という制限があります。 障害が起こったサブシステムを正常に再始動できないと、 通知メソッド・オプションが調べられます。 デフォルト値は ONCE です。
標準入力ファイル/デバイス サブシステムが受信する入力データの発信元である、ファイルまたはデバイスを指定します。 デフォルトは /dev/console です。 このフィールドには、null ターミネーターを含めて 200 バイト (1 バイト文字で 199 文字、 またはマルチバイト文字セットで 99 文字) を超えるものは使用できません。 通信タイプがソケットの場合、このフィールドは無視されます。
標準出力ファイル/デバイス サブシステムが送信する出力データの送信先である、ファイルまたはデバイスを指定します。 このフィールドには、null ターミネーターを含めて 200 バイト (1 バイト文字で 199 文字、 またはマルチバイト文字セットで 99 文字) を超えるものは使用できません。 デフォルトは /dev/console です。
標準エラー・ファイル/デバイス サブシステムがエラー・メッセージを書き込む先の、ファイルまたはデバイスを指定します。 このフィールドには、null ターミネーターを含めて 200 バイト (1 バイト文字で 199 文字、 またはマルチバイト文字セットで 99 文字) を超えるものは使用できません。 障害は、通知メソッドの一部として操作されます。 デフォルトは /dev/console です。

注: 重大なエラーは、エラー・ログに送られます。

通信タイプ srcmstr デーモンとサブシステム間の通信メソッドを指定します。 IPC (-I)、ソケット (-K)、 シグナル (-S) の 3 つのタイプを定義することができます。 デフォルトはソケットです。
通信 IPC キュー・キー srcmstr デーモンがサブシステムと通信する際に 使用する、IPC メッセージ・キュー・キーに対応する 10 進数値を指定します。 IPC メッセージ・キューを使用して通信するサブシステムの場合、 このフィールドは必須です。 完全修飾パス名と ID パラメーターを指定した ftok サブルーチンを使用して、このキーが固有であることを確認してください。 srcmstr デーモンは、サブシステムを始動する前に、 メッセージ・キューを作成します。
グループ名 グループのメンバーとして、サブシステムを指定します。 このフィールドには、null ターミネーターを含めて 30 バイト (1 バイト文字で 29 文字、 またはマルチバイト文字セットで 14 文字) を超えるものは使用できません。 このフィールドはオプションです。
サブシステム・メッセージ・タイプ サブシステムのメッセージ・キューに入れるメッセージの mtype を指定します。 サブシステムは、 msgrcv または msgxrcv サブルーチンを使用してメッセージを検索するために、この値を使用します。 メッセージ・キューを使用している場合、このフィールドは必須です。
SIGNORM シグナル値 通常停止要求が送信されたときに、サブシステムに送信する値を指定します。 シグナル通信タイプを使用しているサブシステムの場合、このフィールドは必須です。
SIGFORCE シグナル値 強制停止要求が送信されたときに、サブシステムに送信する値を指定します。 シグナル通信タイプを使用しているサブシステムの場合、このフィールドは必須です。
DISPLAY 値 操作不能なサブシステムの状況を lssrc -a または lssrc -g の出力に表示できるかどうかを示します。 -d フラグは、表示することを示し、-D フラグは 表示しないことを示します。 デフォルトは -d (表示) です。
待ち時間 代替アクションが行われる前にサブシステムが再始動または停止の要求を完了して おかなければならない時間を、秒数で指定します。 デフォルトは 20 秒です。
監査 ID サブシステムの監査 ID を指定します。 このフィールドは、サブシステムの定義時に srcmstr デーモンによって 自動的に作成され、設定されれば、セキュリティー・システムによって使用されます。 プログラムでこのフィールドを設定したり、変更したりすることはできません。

サブサーバー・タイプ・オブジェクト・クラス

サブシステムにサブサーバーがあり、サブシステムがサブサーバー関連のコマンド を srcmstr デーモンから受信しようとしている場合は、 オブジェクトをこのクラスで構成する必要があります。

このオブジェクト・クラスには、 srcobj.h ファイルの SRCsubsvr 構造体で定義されている以下の 3 つの記述子が含まれています。

ディスクリプター 定義
サブサーバー ID (キー) サブサーバー・タイプ・オブジェクト ID の名前を指定します。 サブサーバー・タイプ名のセットは、サブサーバー・コマンド の -t フラグに使用可能な値を定義します。 名前の長さは、null ターミネーターを含めて 30 バイト (1 バイト文字で 29 文字、 またはマルチバイト文字セットで 14 文字) を超えることはできません。
所有サブシステム名 サブサーバー・オブジェクトを所有する、サブシステムの名前を指定します。 このフィールドは、SRC サブシステム・オブジェクト・クラスへのリンクとして定義されます。
コード・ポイント (code point) サブサーバーを識別する 10 進数を指定します。 コード・ポイントは、サブサーバーを制御するサブシステムに渡されます。objectSRC 要求構造体の subreq 構造体のフィールド。 サブサーバー・オブジェクト名もコマンドに指定されている場合、 srcmstr デーモンはコード・ポイントをサブシステムに転送します。objnamesubreq 構造体のフィールド。 これらのエレメントの例については、 spc.h ファイルの 「SRC 要求構造の例」 を参照してください。

サブサーバーを参照するコマンドは、各サブサーバーを名前付きタイプとして 識別し、また、サブサーバー・タイプの各インスタンスに名前を追加することができます。 SRC デーモンは、サブサーバー・タイプを使用して、サブサーバーの制御サブシステムを 判別しますが、サブサーバー名の検査は行いません。

通知オブジェクト・クラス

このクラスは、サブシステムの障害が検出されたときにサブシステム提供のルーチンを起動するメカニズムを、srcmstr デーモンに提供します。 SRC デーモンは、サブシステム処理の終了を示す SIGCHLD シグナルを受け取ると、サブシステム (srcmstr デーモンによって保守されている) の状況を検査して、終了が stopsrc コマンドによるものかどうかを判別します。 stopsrc コマンドが出されていなかった場合、 その終了は異常終了であると解釈されます。 定義内の再始動アクションで再作成が指定されていない場合、あるいは再作成の試みに失敗した場合、srcmstr デーモンは、そのサブシステム名に関連したオブジェクトを通知オブジェクト・クラスから読み取ろうとします。 そのようなオブジェクトが検出された場合は、 そのサブシステムに関連したメソッドが実行されます。

通知オブジェクト・クラス内でサブシステム・オブジェクトが検出されない場合、srcmstr デーモンは、そのサブシステムがグループに属しているかどうかを判別します。 グループに属している場合、srcmstr デーモンは、 通知オブジェクト・クラスからそのグループ名のオブジェクトを読み取ろうとします。 そのようなオブジェクトが検出された場合は、それに関連したメソッドが実行されます。 このように、サブシステムのグループは共通メソッドを共有することができます。

注: サブシステム通知メソッドは、 グループ通知メソッドに優先します。 したがって、サブシステムは、一緒に始動されるグループに属することはできますが、 それぞれに固有のリカバリーまたはクリーンアップ・ルーチンは、定義されたままです。

通知オブジェクトは、次の 2 つのディスクリプターによって定義されます。

ディスクリプター 定義
サブシステム名 または グループ名 定義する通知メソッドの対象である、サブシステムまたはグループの名前を指定します。
通知メソッド srcmstr デーモンがサブシステムまたはグループの異常終了を検出したときに実行される、ルーチンに対する絶対パス名を指定します。

このような通知は、サブシステムを再始動する前に固有のリカバリー作業またはクリーンアップ作業が必要な場合に役立ちます。 これは、サブシステムが異常停止した原因を判別するための情報収集にも使用することができます。

通知オブジェクトは、 mknotify コマンドを使用して作成されます。 通知メソッドを変更するには、 rmnotify コマンドを使用して既存の通知オブジェクトを除去してから、新しい通知オブジェクトを作成する必要があります。

コマンド 定義
mknotify SRC 構成データベースに通知メソッドを追加します。
rmnotify SRC 構成データベースから通知メソッドを除去します。

srcmstr デーモンは、サブシステムのリカバリー・アクティビティーのログに記録します。 サブシステムの障害を報告するのは、サブシステムの責任で行います。