2012-02-14 4 views
2

私は自分のWebアプリケーションに必要なクリティカルなWindowsサービスを持っています。Windowsサービス "Starting"

残念ながら、Windowsサービスは正常に起動しませんが、約7分38秒間 "開始中"の状態のままで失敗します。

サービスが「起動中」モードの場合、私のWebアプリケーションは正常に動作します。

私は、必要に応じてサービスを再起動するために毎分実行されるwindowsスケジュールされたタスクを持っています。

net start "my service" 

したがって、サービスが失敗してから再び起動するまでに約22秒のギャップがあります。さらに、私のアプリケーション(このサービスに依存している)が動作するにはさらに30秒かかります。

私は故意に間違ったサービスに名前を付けませんでした。私は別の質問https://stackoverflow.com/questions/8470975/oracle-oc4j-service-keeps-stoppingを開きましたが、その目的は実際に問題を解決することでした。

この質問では、私は問題を解決しようとしているのではなく、このサービスを「開始」の状態に保つための回避策を探しています。

今日、サーバーを再起動するまで、3分ごとにサービスを再起動するという回避策が実際には機能し、アプリケーションのダウンタイムはまったくありませんでした。

誰か提案はありますか?私は、サービスを "Starting"の状態に長く保つために、ServicesPipeTimeoutのレジストリキーを86400000(24時間!)に変更しようとしました。

+0

サービスではなく、状態RUNNINGにする必要があります開始よりも。開始は移行状態です([MSDN詳細])。http://msdn.microsoft.com/en-us/library/windows/desktop/ee126211(v = vs.85).aspx)。 –

+0

Seva Titovありがとうございます。私はこれが最適な状況ではないと認めますが、アプリケーションは「開始」モードでも機能します。 (私はあなたが "実行"ではなく "開始"を意味すると思う) – gordon613

+0

'sc query 'は開始したサービスのRUNNINGを報告します。しかし、その名前は重要ではありません。サービスは、開始状態では長時間にわたり続けることはできません.SCMは最終的に終了します。 –

答えて

4

...私はhttp://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8279

私はWinDbgのを開いて、プロセスにアタッチしなかったからのWinDbgをダウンロードして、私のサービスを選択しました。

WinDbgが開いている限り、プロセスを「保持」して停止しないようです。それはそうしていきますどのくらい

、見られることを残るが、それは今の半分以上時間保持しています(サービスは8分後に停止する前のに対し)

+2

このソリューションは、システム全体のアップグレードを行うまで、ほぼ1年間保持されました。 – gordon613

+1

1年後に人を更新するためにUpvoted! ;) – FrostbiteXIII

3

タイムアウトが24時間に設定されていて、サービスが開始または「開始」モードにとどまっていない場合は、クラッシュまたは閉鎖している必要があります。

すぐにサービスを再起動しようとするとクラッシュし、サービスのプロパティで[復旧]タブを選択します。 1回目、2回目、およびそれ以降の失敗時に再起動するサービスを設定し、0分後にサービスを再起動するように設定する必要があります。

Windowsがサービスを正しく終了していると判断した場合、

これは、問題を解決するサービスを書いた人がいない場合にのみ、これが最後の手段であることは言うまでもないでしょう。

+0

こんにちは。再起動についてのアドバイスをありがとうございます。これはうまくいきませんでした(あなたが書いているようにサービスが正しく閉じられなかったか、または私のケースで正しくサービスが開始されなかったため) – gordon613

+0

実際には、サービスが正しく終了していないと**はすべきです* *すぐに再起動してください。正常に終了した場合、サービスは意図的にシャットダウンされているとみなされ、再起動しません。サービスが「開始」している場合は、サービスを再起動する必要はありません。 – sgmoore

+0

あなたが私に誤解された場合に備えて、これはサービスが適切に開始されるように、または起動し続けるようには設計されておらず、クラッシュ直後に再起動するように設計されています。残念なことに、バグのあるプログラムをクラッシュさせないようにするための魔法のボタンや設定はありません。そのため、サービスを書いた人に問題を見る必要があります。 – sgmoore

1

[復旧]タブの3つのセクションすべてで[サービスの再起動]を指定してください。ただし、サービスが異常終了した場合にのみ機能します。

私たちの会社も同様の問題に直面しており、Service Protectorを開発しました。これはサービスをベビーシッターして24時間365日稼働させることができる商用アプリケーションです。あなたの状況でもうまくいくかもしれません。

私はについて非常に不安だ私の問題に対する可能な解決策を見つけた

+0

CoreTechありがとうございました。私は現在Service Protectorを試みています。 (私はあなたの会社にこれについての重要なフィードバックを送ってきました。あなたがそれを取得しなかった場合は教えてください。)[復旧サービスの復旧]タブでは、サービスがすぐに再起動しますしかし、私のアプリケーションはサービスが再起動している数秒で終わるので、サービスをただちに再起動するのではなく、停止させたくないのが理想的です。 – gordon613