10

Windows Server 2003 マシンでサービスを実行しています。このサービスは、FTP サーバー上の特定のフォルダーを監視し、そこにファイルが表示されると、いくつかの異なる実行可能ファイルの 1 つを呼び出してそれらを処理します。

このサービスがハングアップまたは停止したときに、何らかの方法でスタッフに警告する方法を見つけるように依頼されました。

これだけの情報で何か提案できる人はいますか?そうでない場合、他に何を知る必要がありますか?

このサービスを監視する別のサービスを作成できるようですが、停止する可能性があるため、何も解決していません。

4

3 に答える 3

6

私が知っている唯一のことは、そのサービスが実行されているかどうかを監視する別のアプリケーションまたはサービスを作成することです。そのようなものは、予期しない動作をして停止するべきではありません。

もう 1 つ行うべきことは、Windows のサービスに移動し、そのプロパティに移動してから、回復オプションに移動することです。ここから、サービスが失敗した場合の動作を設定できます。Windows 7 のオプションは、サービスまたはコンピューターを再起動するか、プログラムを実行することです。このプログラムは、何らかの通知を送信できます。ただし、これらのオプションの一部またはすべてが Server 2003 に存在するかどうかはわかりません。これは、サービスが単にハングした場合にも機能しない可能性がありますが、サービスを監視しているサービスも機能しない可能性があります。

また、ソース コードがある場合は、OnStop()(C# の場合) などのサービス関連のメソッドの一部をオーバーライドして通知を送信することもできますが、これが失敗してもうまくいくとは思いません。

私の個人的な選択は、繰り返し失敗しない限り、失敗時にサービスを再起動するための回復オプションを設定することです。これにはオプションもあります。ただし、自分に最適だと思うことをしてください。それを行うためのフェイルセーフな方法は実際にはありません。

更新: 確認したところ、Server 2003 のサービス マネージャーには実際に同じ回復オプションがあります。上記の人たちが言ったように、あなたはそれを扱うことができますが、私が見たものからはC++でのみです。それを行うコマンドプロンプトの方法もあります:

sc failure [servicename] reset= 0 actions= restart/60000

そのコマンドはこちらで見つかりました。詳細については、MSDNのドキュメントを参照してください。C++ を使用していない場合は、C# または他の言語からこのコマンドを呼び出すことができます。ソース コードがない場合は、コマンド プロンプトから直接使用できます。

于 2013-07-31T18:07:52.913 に答える
3

ChangeServiceConfig2()を使用して、サービスの失敗アクションを定義します。これを使用して、サービスが予期せず終了した場合に、外部コマンドを呼び出してアラートを発行する (または、他のほとんどのことを行う) ことができます。

于 2013-07-31T18:08:55.970 に答える
1

SCM (サービスを処理するコンポーネント) には、必要に応じてサービスを再起動するために利用できる組み込みの自動再起動ロジックがあります。さらに、および/または代わりに、「カスタム アクション」を構成して、サービスの失敗に関連付けることができます。カスタム アクションには、独自のプログラムの起動を含めることができます。これにより、失敗がログに記録され、おそらく手動でサービスを再起動できます。

このようなカスタム アクションの詳細については、MSDN で、そのようなアクションの構成に使用される構造のドキュメントを参照してください: SERVICE_FAILURE_ACTIONS. その構造に入力したら、ChangeServiceConfig2関数を呼び出して SCM に通知します。

「私の障害ハンドラ プログラムがクラッシュしたらどうなるか」と尋ねないでください :)

于 2013-07-31T18:07:35.483 に答える