IISのApplication Poolは、 指定されたユーザーで実行しています。 今回は、そのユーザー設定を意図した設定にしていないとApplication Poolが開始できずあせっちゃうよというお話です。
原因
Event ID 5021は、Application Poolの実行ユーザーの認証が出来なかったことを示します。 TechNet - Event ID 5021 — IIS Application Pool Availability.aspx)
このApplication Poolで利用しているユーザー認証情報は、"C:\Windows\System32\inetsrv\config\applicationHost.config" などにあります。 これは、自身の環境に依存するので確認してください。
この中に記述されているユーザー情報、このユーザー設定に原因があります。 以下は、自分が気付くきっかけになったサイトの抜粋です。 IIS APP pool issue - resolved
<site name="WhatsUpGold" id="2" serverAutoStart="true"> <application path="/" applicationPool="NmConsole"> <virtualDirectory path="/" physicalPath="D:\Program Files (x86)\Ipswitch\WhatsUp\HTML" userName="WhatsUpGold_User" password="[enc:AesProvider:HASH ON FIRST LINE:enc]" /> </application> <application path="/NmConsole" applicationPool="NmConsole"> <virtualDirectory path="/" physicalPath="D:\Program Files (x86)\Ipswitch\WhatsUp\HTML\NM.UI" userName="WhatsUpGold_User" password="[enc:AesProvider:HASH ON SECOND LINE:enc]" logonMethod="ClearText" /> </application> <bindings> <binding protocol="http" bindingInformation="*:8080:" /> </bindings> </site>
それまで使えていて、再起動後起こったいう場合は、10中8,9恐らく該当ユーザーのパスワード期限切れです。
この場合は、Server Manager > Computer Management > User and Group > UserのProperty > 次回ログインでパスワード変更を..... が有効になってしまっていることが多いです。
対処
パスワードを設定するか、無期限にするなど方法はあります。 この辺は、セキュリティポリシーに従うべきでしょう。
仮にパスワードを無期限にして、パスワード変更も不可にする場合は、以下のPowerShellコードで変更可能です。
$users = @( "UserName", "UserName2", ) foreach ($user in $users) { $HostPC = [System.Environment]::MachineName $targetuser=[adsi]("WinNT://" + $HostPC + "/$user, user") $userFlags = $targetuser.Get("UserFlags") $userFlags = $userFlags -bor 0X10040 $targetuser.Put("UserFlags", $userFlags) $targetuser.SetInfo() }
パスワードの更新や、フラグ変更が完了後、正常にApplication Poolが開始できれば問題ありません。 気付かないといきなりなるので気を付けてください。いや、本当に笑えませんから。