Windows服务重置失败计数设置的工作原理

Windows服务重置失败计数设置的工作原理

为了测试目的,我有一个 Windows 服务,我想在第一次失败后 1 秒重启,在第二次失败后 5 秒重启。2 分钟内每次后续失败都应使服务停止。为了满足此条件,我尝试使用“重置失败计数”配置,但没有成功。在我的计算机(Windows7 Enterpise x64)上,我创建了一个简单的服务,它在启动后 5 秒内意外关闭。配置如下:

sc failure FAIL1 reset= 120 actions= restart/1000/restart/5000//

我预计在 2 分钟后服务故障计数器将重置并重复重启序列。但也许当服务在第二次故障后处于停止状态时,它永远没有机会重置计数器。所以我有另一个配置的服务:

sc failure FAIL2 reset= 120 actions= restart/1000/restart/5000

事实证明,FAIL2 服务在第二次故障后会在 5 秒内不断重启,并且事件日志错误消息中的可用重置计数器仍在增长。

使用第三项服务(FAIL3),我尝试使用服务属性的“恢复”选项卡中可用的解决方案来配置类似的选项:

  1. 第一次失败:重新启动
  2. 第二次失败:重新启动
  3. 后续:不采取任何行动
  4. 重置失败次数:1(天)
  5. 重启服务时间:0(分钟)

此行为与 FAIL1 类似。执行两次并在一天后保持停止状态。

在我的计算机上,重置计数器超时似乎不起作用。也许我想象的配置无法使用此技术实现。或者我对重置计数器的理解不正确。

答案1

我对 Windows 服务计数器的理解完全是错误的。这里最重要的是:

重置失败次数设置是时间量从服务开始 此后失败计数器将被重置。

根据定义的样本配置,每个服务在启动后 5 秒内意外关闭,每种情况都不会达到重置计数器定义。重置计数器超时应小于 5 秒,例如。

sc failure FAIL1 reset= 3 actions= restart/1000/restart/5000/restart/10000

结果,我们的服务在 1 秒后不断重启,并且每个事件日志错误消息都包含信息:

它已执行 1 次

2 次服务故障必须导致服务在 2 分钟内停止的想法无法通过这种方式实现。我们所能做的就是将重置计数器设置为超过 5 秒,并且每次 2 分钟内的后续故障都会重新启动:

sc failure FAIL1 reset= 10 actions= restart/1000/restart/5000/restart/1200000

相关内容