我有一个 Windows 服务,我设置了服务失败时的恢复选项(通过服务应用程序,在服务属性的恢复选项卡中)。
当前选项设置为15 分钟后将进行第一次和第二次重启尝试,然后在一天后重置失败计数器。启动类型为自动延迟启动。
虽然这通常有效,但在重新启动后启动失败后,我似乎没有进行任何重试。以下是 Windows 事件日志的摘录:
11.06.2020 02:18:28 The process C:\WINDOWS\system32\svchost.exe (S701028A) has initiated the restart of computer S701028A on behalf of user NT AUTHORITY\SYSTEM for the following reason: Operating System: Recovery (Planned) Reason Code: 0x80020002 Shutdown Type: restart Comment:
11.06.2020 02:20:11 The XYZ Service service entered the stopped state.
11.06.2020 02:20:16 The operating system is shutting down at system time 2020-06-11T00:20:16.361111600Z.
....
11.06.2020 02:20:19 The operating system started at system time 2020-06-11T00:20:19.490015600Z.
11.06.2020 02:24:10 The XYZ service failed to start due to the following error: The service did not respond to the start or control request in a timely fashion.
11.06.2020 02:24:10 A timeout was reached (30000 milliseconds) while waiting for the XYZ service to connect.
看来恢复选项只适用于进程退出,而不适用于系统启动。如何定义系统启动后的重试?
注释:操作系统名称 Microsoft Windows Server 2012 R2 Standard 版本 6.3.9600 Build 9600
答案1
服务的失败操作仅在服务生命周期中的定义点调用。从服务故障行动记录:
如果服务终止时没有向服务控制器报告 SERVICE_STOPPED 状态,则认为服务失败。
该语句隐含地表示服务在意外退出之前必须处于 SERVICE_RUNNING 状态。也就是说,对于未进入 SERVICE_RUNNING 状态的服务,不会调用失败操作。
在您的具体示例中,XYZ 服务无法启动(即它从未转换到 SERVICE_RUNNING),因此不会调用任何失败操作。