6.20.5 ユーザコマンドの作成方法
ここでは,ユーザコマンドの作成方法について説明します。作成したユーザコマンドは,HAモニタの環境設定のusrcommandオペランドに設定してください。
ユーザコマンドは,系で一つ作成します。ユーザコマンドの作成には,C言語やシェル言語などを使用できます。
ユーザコマンド発行時には,HAモニタは,状態が変化したサーバやHAモニタの情報を引数としてユーザコマンドに渡します。そのため一つのファイル内で,HAモニタから渡される引数を使用してサーバの状態変化やHAモニタの状態変化の条件分けをして,各状態変化時にユーザが実行したい処理を記述します。
ユーザコマンドの中で必要な動作環境を設定してください。なお,Unit設定ファイルにも環境変数を設定できますが,HAモニタを上書きインストールするとUnit設定ファイルが上書きされます。そのため,ユーザコマンドの中で動作環境(環境変数)を設定することを推奨します。
ユーザコマンドを実行した際に引き継がれる環境変数については「6.14.2 サーバの停止コマンドの作成」の「(2) サーバの停止コマンドの作成方法」を,HAモニタから実行するコマンドの動作環境については「6.23 HAモニタから実行するコマンドの動作環境」を参照してください。
サーバの状態変化を契機にユーザコマンドを発行する場合,次の点を考慮します。
-
実行サーバと待機サーバとで異なる処理を実行するには,サーバ種別を判定する処理を記述します。
-
一つの系で複数のサーバを実行する場合,サーバによって異なる処理を実行させるには,サーバ識別名を判定する処理を記述します。
サーバ種別やサーバ識別名は,ユーザコマンド実行時にHAモニタから引数として渡されます。HAモニタから渡される引数については,「6.20.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)
-
系切り替え時の起動リトライオーバを検出した(-t)
-
- 共有リソースを制御するためのユーザコマンド作成
-
共有リソースを制御するためのユーザコマンド作成時には,次の点を考慮してください。
-
実行サーバが起動する前に,共有リソースに接続する。
実行サーバが共有リソースを使えるようにするため,起動前に共有リソースに接続します。
-
系間で排他制御が必要なリソースは,実行サーバが停止したあとに切り離す。
両方の系から同時に接続しないようにするため,実行サーバが停止したあとに切り離します。
-
必要に応じて,実行サーバから待機サーバに共有リソースの情報を引き継ぐ。
実行サーバから待機サーバに共有リソースの情報を引き継ぐには,サーバ引き継ぎ情報設定・表示コマンド(moninfoコマンド)を使用できます。
-