cc [flags…] –I /usr/cluster/include file –L /usr/cluster/lib –l dsdev#include <rgm/libdsdev.h> scha_err_t scds_svc_wait(scds_handle_t handle, time_t timeout);
scds_svc_wait() 関数は、指定のタイムアウト時間が経過するまでモニター対象のプロセスグループの終了を待機します。この関数は、呼び出し元の START メソッドに渡されるリソースの scds_pmf_start(3HA) によって起動されたすべてのプロセスグループを待機します。scds_svc_wait() 関数は、リソースの Retry_interval プロパティーと Retry_count プロパティーを使用して、待機する終了プロセス数を制限します。Retry_interval 内の終了プロセス数が Retry_count 個に達した場合、scds_svc_wait() は SCHA_ERR_FAIL とともに終了します。
失敗プロセス数が Retry_count を下回った場合、プロセスは再起動されます。scds_svc_wait() は、タイムアウト時間がすべて経過するまで、さらにプロセスの終了を待機します。失敗プロセス数は、そのあとの scds_svc_wait() 呼び出しでも計測されます。
次のパラメータがサポートされます。
scds_initialize(3HA) から返されるハンドルです。
タイムアウト時間 (秒) です。
scds_svc_wait() 関数の戻り値は次のとおりです。
関数の実行に成功。
関数の実行に失敗。
関数はタイムアウト。
プロセスの終了が行われなかったが、プロセスが正常に再起動された。
失敗回数が Retry_count プロパティーの値に到達。
システムエラー、または予期せぬエラーが発生。
その他のエラーコードについては、scha_calls(3HA) を参照してください。
次の例では、START メソッド内で scds_svc_wait を使用して、サービスの起動に失敗した場合ただちに終了する方法を示します。scds_pmf_start() を使ってアプリケーションプロセスを起動したあと、START メソッドは、処理が正常終了して戻る前にアプリケーションが完全に初期化され、使用可能な状態になるまで待機します。アプリケーションの起動に失敗した場合、START メソッドは、エラーを戻して終了する前に、Start_timeout 時間が経過するまで待機する必要があります。次の例のように、scds_svc_wait() を使用することで、START メソッドによるアプリケーションの再起動回数(Retry_count) を指定できます。サービスを起動できない場合、START メソッドはエラーを出してただちに終了します。
/* * scds_svc_wait is a subroutine in a START method to * check that the service is fully available before returning. * Calls svc_probe() to check service availability. */ int svc_wait(scds_handle_t handle) { while (1) { /* Wait for 5 seconds */ if (scds_svc_wait(handle, 5) != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "Service failed to start."); return (1); /* Start Failure */ } /* Check if service is fully up every 5 seconds */ if (svc_probe(handle) == 0) { scds_syslog(LOG_INFO, "Service started successfully."); return (0); } } return (0); }
インクルードファイル
ライブラリ
次の属性については、attributes(5) を参照してください。
|
scds_initialize(3HA), scds_pmf_start(3HA), scha_calls(3HA), attributes(5), r_properties(5)
START メソッドがリソース上の Start_timeout 設定を超過した場合、Resource Group Manager (RGM) は START メソッドを強制終了します。この動作は、START メソッドが scds_svc_wait() の終了を待機しているときも変わりません。
リソース上の Retry_interval の値が Start_timeout の値より大きい場合、START メソッドは RGM によってタイムアウトになります。この動作は、失敗回数が Retry_count に達していない場合も変わりません。
START メソッドの複数の scds_pmf_start() を呼び出して複数のプロセスを起動した場合、scds_svc_wait() は終了したプロセスグループを起動します。プロセスグループ間の依存関係は強制されません。プロセスグループ間に依存関係があり、失敗時にその他のプロセスグループの再起動を要求するようなプロセスグループが存在する場合は、scds_svc_wait() を使用してはいけません。プロセスグループの健全性検査の間待機する場合は、sleep() を使用してください。