構文
perform_action [-G] [-s] [-b] [-n] -t tag-name -a action-name [- - arg1 arg2 … argn]
説明
LRACI プログラム perform_action は、次の順序でプロセスを実行します。
- -t オプションの引数 tag-name で指定されるリソースを探します。
- -a オプションの引数 action-name で指定される処理スクリプトを探します。
- tag-name リソースインスタンス上で処理スクリプトを実行します。
-- 引数の後の引数はそのまま処理スクリプトに渡されます。これらの引数は、処理の開発者が必要に応じて要求します。
perform_action プログラムは次のアルゴリズムで処理スクリプトを探します。まず、以下のように、 tag-name で指定されるリソースインスタンスのリソースタイプについて、actions ディレクトリを検索します。
%LKROOT%\subsys\appname\resources\restypname\actions\action-name.ksh
見つからない場合は、以下のように、リソースインスタンスが属するアプリケーションの actions ディレクトリをチェックします。
%LKROOT%\subsys\appname\actions\action-name.ksh
restore 処理と remove 処理は LRACI の特例です。restore 処理は、リモートシステムで稼働している可能性があるアプリケーション階層をローカルシステムに移動します。restore 処理では、LRACI は最初にリソースインスタンス tag-name が ISP 状態ではないことを確認します。ISP 状態でなければ、このリソースが依存しているすべてのリソースインスタンスが再帰的にチェックされます。このチェックは、リソースが別のリソースに依存していないか、依存しているリソースがすべて ISP 状態になっていることが判明するまで継続されます。リソースが ISU 状態だった場合は、ISP 状態になります。
リソースが OSU 状態または OSF 状態だった場合は、リモートシステム上の影響を受けるリソースに対して remove スクリプトが実行されます。これが完了すると、LRACI は上記のアルゴリズムを使用して restore 処理を検索して実行します。スクリプトが失敗した場合、リソースは OSF 状態になり、LRACI は停止します。正常に実行された場合、LRACI は tag-name で指定されたリソースがリストアされるまで、ツリーの上に向かってリソースを再帰的に「リストア」します。次に、LRACI は関連するルートリソースインスタンスがすべてリストアされるまで、同様の方法で再帰的に親リソースインスタンスのチェックと「リストア」を行います。どの場合でも、LRACI は上記のアルゴリズムにより、LRACI が現在スキャンしているリソースのリソースアプリケーションおよびリソースタイプを使用して適切な restore スクリプトを検索します。 tag-name リソースのリソースアプリケーションとリソースタイプは検索に使用しません。
remove 処理では、リソースが逆方向に再帰的に移動されます。LRACI は、 tag-name リソースに直接的または間接的に依存しているルートリソースから下に向かって、ISP 状態または ISU 状態のすべてのリソースの remove スクリプトを呼び出します。tag-name リソースも含まれます。ISP 状態でも ISU 状態でもないリソースは無視されます。いずれかの remove スクリプトが失敗した場合、LRACI は失敗したリソースを OSF 状態にして停止します。どの場合でも、LRACI は上記のアルゴリズムにより、LRACI が現在スキャンしているリソースのリソースアプリケーションおよびリソースタイプを使用して適切な remove スクリプトを検索します。 tag-name リソースのリソースアプリケーションとリソースタイプは検索に使用しません。
remove 処理および restore 処理では、引数 -t tag-name および -i ident-field が、対象のリソースインスタンスに対応する引数リストに自動的に追加されます。
以下に、 perform_action に指定できる引数について説明します。
-G |
action-name が remove、restore、delete の場合のみ使用します。このオプションを指定しない場合、処理を実行する前後にグローバル前処理スクリプトとグローバル後処理スクリプトが実行されます (LCD の lcdrecover を参照)。このオプションを指定した場合、グローバル前処理スクリプトとグローバル後処理スクリプトは実行されません。 このオプションは、 perform_action を 2 回以上実行する必要があるが、グローバル前処理スクリプトとグローバル後処理スクリプトは 1 回だけ実行したいときに役立ちます。また、リソース階層を作成しながら perform_action を実行する必要がある場合にも役立ちます。階層作成スクリプトは「admin lock flag」を取得するように設定されますが (LCDI_フラグ を参照)、restore 後処理スクリプトも「admin lock flag」を要求し、これによって競合の問題が発生します。そのため、階層作成時には perform_action によってグローバル前処理スクリプトとグローバル後処理スクリプトが実行されないようにする必要があります。 |
-s |
restore 処理のデフォルトの動作は、指定したタグの上および下のすべてのオブジェクトを起動します。また、remove 処理のデフォルトの動作は、指定したタグの上のすべてのオブジェクトを停止します。 -s オプションは、指定したフラグだけに処理の範囲を制限します。 |
-b |
restore 処理のデフォルトの動作は、指定したタグの上および下のすべてのオブジェクトを起動します。 -b オプションは、この動作を、指定したタグの下のオブジェクトだけに変更します。このオプションは remove 処理には影響しません。 |
-n |
action-name が remove または restore の場合のみ使用します。このオプションを指定した場合、リソースの予約はチェックされず、リソースが予約されているかどうかにかかわらず処理が実行されます。 警告: このオプションの使用時は、特に注意してください。 このオプションを指定しない場合、remove スクリプトまたは restore スクリプトを実行する前に、LRACI はいずれかの処理を実行するリソースが現在別のプロセスによって予約されているかどうかを確認します。リソースの「サービスからの削除」、「サービスのリストア」、または「リカバリ」の処理を実行している間リソースを予約できます。 いずれかのリソースが予約されている場合、プロセスがリソースの予約を解除するまで、LRACI は指定された期間だけ待機します。この期間が経過すると、LRACI は予約を解除します。いずれの場合でも、LRACI はすべてのリソースを予約してから、指定されたアルゴリズムに従って処理を実行します。 |
-t tag-name |
最後に処理が実行されるリソースインスタンス。 |
-a action-name |
実行されるリソース処理。 |
-- arg1 arg2 … argn |
リソース処理開発者が必要に応じて定義して、処理スクリプトに渡すことができる引数。getlocks によって保護された領域内で -G オプションを使用せずに perform_action を実行する場合は、 arg1 に -m を設定して、getlocks の 2 つ目のインスタンスが実行されないようにしてください。 |
例
例として、以下の処理を呼び出します。
perform_action -t SCSI-USR-DISK -a reset-heads -- -h 7
LRACI プログラム perform_action は、reset-heads に対応する処理を検索して、以下の引数で実行します。
reset-heads -t SCSI-USR-DISK -h 7
終了コード
LRACI は、次の終了コードを返します。
0 | 処理に成功した。 |
1 | システムコールまたはライブラリコールが内部エラーを返した。 |
2 | ユーザが指定した構文にエラーがある。 |
3 | LifeKeeper の内部エラー。 |
4 | 既存のオブジェクトに対する処理を要求した。 |
5 | 不正な引数を渡した。 |
6 | インデックスが有効な範囲を超えている。 |
7 | 存在しないオブジェクトに要求を発行した。 |
8 | リソースインスタンスの削除を要求したが、そのリソースインスタンスには、削除していないリソースインスタンスが依存している。 |
9 | 相手のシステムと通信できない。 |
このトピックへフィードバック