IIS の Application Pool は、 指定されたユーザーで実行しています。
今回は、そのユーザー設定を意図した設定にしていないと Application Pool が開始できずあせっちゃうよというお話です。
原因
Event ID 5021 は、Application Pool の実行ユーザーの認証が出来なかったことを示します。
TechNet - Event ID 5021 — IIS Application Pool Availability
この 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 が開始できれば問題ありません。
気付かないと行き成りなるので気を付けてください。いや、本当に笑えませんから。