如何在RapidFailProtection后自动重启IIS应用程序池

wfveoks0  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(286)

我有一个IIS网站。

  • AppPool设置为autoStart = true(因此AppPool在服务器重新启动时开始运行)。
  • AppPool设置为startMode = alwaysRunning(因此网站在AppPool启动时开始运行)。
  • AppPool默认启用了rapidFailProtection。(因此,5分钟内5个站点崩溃将停止AppPool)。

我偶尔会发现AppPool已经停止,我最近意识到这通常意味着有某种网络故障。当这种情况发生时,我的应用程序在启动时失败...这意味着它触发了rapidFailProtection(似乎是明智的)。
但随后AppPool停止,没有任何东西再次启动它。所以一旦网络故障事件结束...它还在下降:(
感觉这一定是一个标准场景,因此我希望有一个标准设置解决方案。某种“在RapidFailProtection后2小时重新启动AppPool”之类的。
RapidFailProtection最理想的情况是启动指数回退过程,但这听起来有点乐观:D

nbewdwxp

nbewdwxp1#

没有类似“RapidFailProtection后2小时重新启动AppPool”的设置。默认情况下启用快速故障保护,它所做的是检查指定数量的硬故障,默认情况下是5分钟内5次故障,然后应用程序池将崩溃并且不会自动重新启动。就是这样
作为替代方案,您可以设置如下所示的PowerShell脚本,并将其设置为定期运行的计划任务,以便定期检查应用程序池的状态,并在停止时重新启动它。当然,也可以设置指定的条件来触发任务。例如,您可以让它按计划执行、在登录时执行、在空闲时执行、在启动时执行或在发生特定事件时执行。您可以参考此article

Import-Module WebAdministration
set-Location IIS:\AppPools
$ApplicationPools = dir
foreach ($item in $ApplicationPools)
{
$ApplicationPoolName = $item.Name
$ApplicationPoolStatus = $item.state
Write-Host "$ApplicationPoolName -> $ApplicationPoolStatus"

if($ApplicationPoolStatus -ne "Started")
{
Write-Host "-----> $ApplicationPoolName found stopped."
Start-WebAppPool -Name $ApplicationPoolName
Write-Host "-----> $ApplicationPoolName started."
}
}

相关问题