6.11.5 ユーザコマンドの作成方法

ここでは,ユーザコマンドの作成方法について説明します。作成したユーザコマンドは,HAモニタの環境設定のusrcommandオペランドに設定してください。

ユーザコマンドは,系で一つ作成します。ユーザコマンドの作成には,C言語やシェル言語などを使用できます。

ユーザコマンド発行時には,HAモニタは,状態が変化したサーバやHAモニタの情報を引数としてユーザコマンドに渡します。そのため一つのファイル内で,HAモニタから渡される引数を使用してサーバの状態変化やHAモニタの状態変化の条件分けをして,各状態変化時にユーザが実行したい処理を記述します。

サーバの状態変化を契機にユーザコマンドを発行する場合,次の点を考慮します。

サーバ種別やサーバ識別名は,ユーザコマンド実行時にHAモニタから引数として渡されます。HAモニタから渡される引数については,「6.11.3 ユーザコマンドの発行形式(サーバの状態変化時)」を参照してください。

注意
ユーザコマンドはHAモニタの処理中に発行されるため,ユーザコマンド内で無限ループなどが発生した場合は,HAモニタの処理を保証できません。ユーザコマンドは,無限ループなどが発生しないように注意して作成してください。ユーザコマンドが無限ループすると,サーバが起動または停止処理中のままになるおそれがあります。
ユーザコマンド内に記述できるコマンド
  • HAモニタのコマンドを,ユーザコマンドから実行できます。
    ただし,HAモニタの開始・終了時(-m start,-m end)に発行されるユーザコマンドからは実行できません。
  • 実行サーバと待機サーバ間で,情報を引き継ぐためのコマンドがあります。
    サーバ引き継ぎ情報設定・表示コマンド(moninfoコマンド)を使用すると,任意の情報を実行サーバから待機サーバに引き継げます。また,引き継ぐ情報を参照できます。
これらのコマンドについては,「9. コマンド」を参照してください。
ユーザコマンドの戻り値判定
HAモニタでは,ユーザコマンドの実行結果をチェックしません。HAモニタは,ユーザコマンドの実行結果に関係なく動作します。
ただし,ユーザコマンドの実行結果を判定して,サーバの起動や系切り替えを中止する機能もあります。サーバの起動開始時(-s start)および系切り替え開始時(-w start,-a start,-h start)に実行されるユーザコマンドについては,サーバ対応の環境設定のuoc_neckオペランドを使用することによって,ユーザコマンドの実行結果(終了コード)が0以外の場合,サーバの起動または系切り替えを中止できます。
HAモニタの処理とユーザコマンドの処理との同期・非同期
HAモニタの処理とユーザコマンドの処理は同期を取って行われます。ただし,次の場合はHAモニタの処理終了とユーザコマンドの終了とが非同期になります。
  • 実行サーバの起動処理終了時(-k online -s end)
  • 実行サーバ障害による系切り替え処理終了時(-k standby -a end)
  • 計画系切り替えによる系切り替え処理終了時(-k standby -w end)
  • 系障害による系切り替え処理終了時(-h end)
  • 実行サーバ障害で実行サーバの再起動を待つ場合(-r)
  • 実行サーバ障害で再起動限界を検出した場合(-n)
共有リソースを制御するためのユーザコマンド作成
共有リソースを制御するためのユーザコマンド作成時には,次の点を考慮してください。
  • 実行サーバが起動する前に,共有リソースに接続する。
    実行サーバが共有リソースを使えるようにするため,起動前に共有リソースに接続します。
  • 系間で排他制御が必要なリソースは,実行サーバが停止したあとに切り離す。
    両方の系から同時に接続しないようにするため,実行サーバが停止したあとに切り離します。
  • 必要に応じて,実行サーバから待機サーバに共有リソースの情報を引き継ぐ。
    実行サーバから待機サーバに共有リソースの情報を引き継ぐには,サーバ引き継ぎ情報設定・表示コマンド(moninfoコマンド)を使用できます。