1

Rapid Fail Protectionが原因でAzureサイトのアプリケーションプールがシャットダウンした場合、自動的に再起動することはできますか?

この質問はほとんど同じ質問をしますが、AzureASP.NET アプリケーションプールのシャットダウンの問題とは関係ありません

おそらくWebRoleを使用して、このページのコードを監視および調整します。プロセスを再起動せずに、Azure WebロールでIISを再起動することは可能ですか?

var mgr = new ServerManager();
var azurePools = mgr.ApplicationPools.Where(p => Guid.TryParse(p.Name));
azurePools.ToList().ForEach(p => p.Recycle());
4

1 に答える 1

2

スタートアップ タスクから次のスクリプトを実行できます (管理者特権のバックグラウンド タスクを作成してください)。

Timeout= 30000
set events = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecNotificationQuery("select * from __instancecreationevent where targetinstance isa 'Win32_NTLogEvent' and TargetInstance.LogFile='System' and TargetInstance.EventCode=5002") 
Do
    WScript.Echo "==========================================================================="
    WScript.Echo "Listening for IIS Rapid Fail Protection Events"
    Set objLatestEvent = events.NextEvent
    Wscript.Echo objLatestEvent.TargetInstance.Message
    ' get the AppPool name from the Eventlog message
    appPool = objLatestEvent.TargetInstance.InsertionStrings(0)
    WScript.Echo "Restarting Application Pool '" & appPool & "' in " & Timeout & " milliseconds"
    WScript.Sleep(Timeout)
    'construct ADSI path to failed AppPool and start by setting AppPoolCommand to 1
    set pool = GetObject("IIS://localhost/w3svc/AppPools/" & appPool)
    pool.AppPoolCommand = 1
    pool.SetInfo
    WScript.Echo "AppPool " & appPool & " restarted"
    WScript.Echo "==========================================================================="
    WScript.Echo
Loop

WMI を使用して、IIS RFP イベントをリッスンします。と組み合わせることで実現ExecNotificationQueryNextEventます。への呼び出しNextEventは、新しいイベントが到着するまでブロックされます。これが発生すると、スクリプトは 30 秒間待機し、アプリケーション プールを再起動します。

とにかく、RFP が開始された場合は、プロセスが何度も何度もクラッシュする理由を確認する方が適切かもしれません。

于 2012-11-21T13:26:29.603 に答える