Windows Service Recovery プロパティ概要

Java Service Wrapper は、Java プロセス内をモニタリング(監視)してエラーからリカバリー(回復)する、 実に良い機能を備えています。 Wrapper 自身がとても安定して動作している間、いかなる障害ポイントを避けられるので良いことです。 Wrapper では、クラッシュしたサービスを自動的に再起動する Windows サービスマネージャーの機能を利用することが可能です。 Wrapper が「0」ゼロ以外の終了コードを返す場合は、それが失敗ではありません。

この[wrapper.ntservice.recovery.<n>]プロパティシリーズでは、 Wrapper コンフィギュレーション内部から、 障害リカバリー(回復)機能を設定することが可能です。 以下のコンフィギュレーション使用例をご覧ください。

注意

これらのプロパティは、Wrapper を Windows サービスとしてインストールするときに使用されます。 このプロパティの変更は、Windows サービスが再起動までに有効になりませんが、 インストールされているサービスのコンフィギュレーションを、サービスの[回復]タブで編集できます。

wrapper.ntservice.recovery.reset プロパティ

対応バージョン :3.5.5
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

Windows サービスコントロールマネージャーには、インストールされた各サービスごとに、障害カウント機能を装備しています。 サービスが予想外で終了するごとに毎回、そのカウンター番号が増えていき、 そのカウンター用に登録された障害アクションを実行します。

このプロパティには、何もエラーなく経過した時間(秒数)を設定します。 この時間が経過すると、サービスマネージャーがそのカウンターを「0 (ゼロ)」にリセットします。 このプロパティのデフォルト値は「3600」(=1時間)です。 もし「-1」を設定すると、サービスコントロールマネージャーがいつまで達てもカウンターをリセットしません。

設定例:リセットまでの経過時間を86400秒(=1日):
wrapper.ntservice.recovery.reset=86400

注意

混乱を避けるために次の点にご注意ください。 サービスコントロールパネル([コントロールパネル]→[管理ツール]→[サービス])の 「プロパティ」ダイアログにある[回復]タブで、 リセット時間が秒数でなく「日数」で表示されています。 つまり、表示された値は「日数」なので、例えば「3600秒」(=1時間)の値は「0日」と表示されます。

wrapper.ntservice.recovery.command プロパティ

対応バージョン :3.5.5
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

サービスコントロールマネージャーでできることの1つは、障害に応答して外部コマンドを実行することです。 これは、クリーンアップ作業や外部通知を送信したりなどの動作に利用することができます。

各リカバリー(回復)イベント用に異なる [wrapper.ntservice.recovery.<n>.failure]プロパティ を指定することが可能ではありますが、 サービスコントロールマネージャー API では1つだけのコマンドを指定することが可能であり、 そのコマンドは1つ以上の複数のリカバリー(回復)イベント用の「障害アクション」として参照されます。

このプロパティにはデフォルト値はありませんが、1つ以上の「障害アクション」 ([wrapper.ntservice.recovery.<n>.failure]プロパティ) が「COMMAND」に設定されている場合には、 必ずこのプロパティを設定しなくてはなりません。

設定例:
wrapper.ntservice.recovery.command=C:\cleanup.bat

wrapper.ntservice.recovery.reboot_msg プロパティ

対応バージョン :3.5.5
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

wrapper.ntservice.recovery.<n>.failure]プロパティ に「REBOOT」が指定されている場合、 サービスコントロールマネージャーはシステムイベント「システムがリブートされた理由」を示すログを記録します。 このプロパティには、そのテキストメッセージを指定します。

デフォルトメッセージは、Wrapper の言語ベースでローカライズされます。 日本語版のデフォルトメッセージは:「Wrapper サービスにエラーが発生したため、今からシステムが再起動されます。」

設定例:
wrapper.ntservice.recovery.reboot_msg=System will reboot now.

wrapper.ntservice.recovery.<n>.failure プロパティ

対応バージョン :3.5.5
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

このプロパティには、Wrapper サービスがクラッシュした場合に起こす「障害時のアクション」を設定します。 プロパティ名の「<n>」コンポーネント部は、カウントされた障害の回数に該当します。

サービスコントロールマネージャーは、システム起動してから、各サービスが障害を起こした回数をカウントします。 もしサービスが少なくとも[wrapper.ntservice.recovery.reset] プロパティで指定した経過時間数の間に障害が発生しなかった場合、その障害カウントを「0 (ゼロ)」へリセットします。 一方、サービスの障害回数がその障害カウント (N) に達した場合、このプロパティで設定したアクションを実行します。 そのアクションは、[wrapper.ntservice.recovery.<n>.failure]プロパティで定義されます。プロパティの「<n>」部分は障害カウントです。 もし障害カウントが設定された「N」値よりも大きい場合、一番大きい「N」値(<n> 番)を持つ障害アクションが適用されます。

可能なアクションは次のとおり:

  • [NONE] :

    サービスマネージャーは何もしません。 これは何もリカバリー(回復)プロパティが指定されていないのと同じです。 サービスが停止すると、停止したままになります。 大きい N 値で定義されたいかなる障害アクションにも到達しません。

  • [RESTART] :

    サービスマネージャーがサービスを再起動します。 JVM が返す指定の終了コードに対して Java アプリケーションを再起動したい場合、 [wrapper.on_exit.<n>]で設定できます。

  • [COMMAND] :

    サービスマネージャーは、 [wrapper.ntservice.recovery.command] プロパティで指定されたコマンドを実行します。 もしコマンド実行後にサービスを再起動したい場合には、 そのコマンド内部で実行されるように設定してください。

  • [REBOOT] :

    サービスマネージャーがマシンをリブートします。 もしサービスの開始モードが 「AUTO_START」に設定されている場合、 そのサービスはリブート後に再び開始されます。 さらに詳しくは[wrapper.ntservice.starttype] プロパティをご覧ください。

設定例:
wrapper.ntservice.recovery.1.failure=RESTART
wrapper.ntservice.recovery.2.failure=COMMAND
wrapper.ntservice.recovery.3.failure=REBOOT

API では、[NONE]あるいは[REBOOT]の後に、 障害アクションを指定することが可能ですが、それらは決して利用されることはないです。

注意

サービスコントロールパネル([コントロールパネル]→[管理ツール]→[サービス])の「プロパティ」ダイアログにある [回復]タブには、 設定された障害アクションの最初の3つが表示されます。 しかしながら、Wrapper の提供する API ではさらに定義が可能です。 3つ以上の障害アクションを利用すると、ダイアログを見たユーザーが混乱することもありますのでご注意ください。

wrapper.ntservice.recovery.<n>.delay プロパティ

対応バージョン :3.5.5
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

このプロパティには、 [wrapper.ntservice.recovery.<n>.failure] プロパティで指定されたアクションに応じて実際に動作する前に、 サービスコントロールマネージャーが待機する時間数(秒数)を設定します。

このプロパティ値を「0」(ゼロ)以下にすることはできません。 デフォルト値は[wrapper.ping.timeout]プロパティの3倍です。

理論上は、障害アクション「NONE」用に遅延を設定することが可能でありますが、 この場合、サービスコントロールマネージャーは「遅延」を無視するでしょう。

設定例:90秒(1.5分)の遅延に設定:
wrapper.ntservice.recovery.1.delay=90

注意

[回復]タブの「サービス」ダイアログ上でサービスをチェックする際に混乱を妨げるために、次の点にご注意ください。 サービスコントロールパネル([コントロールパネル]→[管理ツール]→[サービス])の「プロパティ」 ダイアログにある[回復]タブには、 遅延時間が秒数でなく「分」で表示されています。 つまり、表示された値は「分数」なので、例えば「90秒」(=1.5分)の値は「1分」と表示されます。

全部まとめる

次の例は、

  • 障害カウントのリセット時間を「86400秒」(=1日)
  • 障害1回目のとき:障害アクション1を実行する前に、サービスコントロールマネージャーの待機時間(遅延時間)「90秒間(1.5 分)」
  • 障害1回目のとき:障害アクション1を[RESTART]に指定、「サービスを再起動する」
  • 障害2回目のとき:障害アクション2を実行する前に、サービスコントロールマネージャーの待機時間(遅延時間)「180秒(3分)」
  • 障害2回目のとき:障害アクション2を[COMMAND]に指定、「外部コマンドを実行する」
  • 障害2回目のとき:外部コマンド「C:\cleanup.bat」を設定
  • 障害3回目のとき: 障害アクション3を実行する前に、サービスコントロールマネージャーの待機時間(遅延時間)「600秒(10分)」
  • 障害3回目のとき:障害アクション3を[REBOOT]に指定、「マシンをリブートする」
  • 障害3回目のとき:メッセージを設定、システムイベントのリブート時のログ「System will reboot now」を表示する
設定例:
wrapper.ntservice.recovery.reset=86400

wrapper.ntservice.recovery.1.delay=90
wrapper.ntservice.recovery.1.failure=RESTART

wrapper.ntservice.recovery.2.delay=180
wrapper.ntservice.recovery.2.failure=COMMAND
wrapper.ntservice.recovery.command=C:\cleanup.bat

wrapper.ntservice.recovery.3.delay=600
wrapper.ntservice.recovery.3.failure=REBOOT
wrapper.ntservice.recovery.reboot_msg=System will reboot now.

Windows サービスの[回復]タブをチェックする:

参照: 遅延