Tenho um serviço do Windows, para o qual configuro opções de recuperação quando o serviço falha (através do aplicativo Serviços, na guia Recuperação das propriedades do serviço).
As opções atualmente são definidas para que haja uma primeira e uma segunda tentativa de reiniciar após 15 minutos e, em seguida, redefinir o contador de falhas após um dia. O tipo de inicialização é automático com atraso.
Embora isso geralmente funcione, parece que não faço novas tentativas após uma inicialização com falha após uma reinicialização. A seguir, um trecho do log de eventos do 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.
Parece que as opções de recuperação se aplicam apenas a saídas de processos, não a inicializações do sistema. Como posso definir novas tentativas após a inicialização do sistema?
Observações: Nome do SO Microsoft Windows Server 2012 R2 Standard Versão 6.3.9600 Build 9600
As ações de falha de um serviço são invocadas apenas em um ponto definido no ciclo de vida de um serviço. Da documentação sobre ações de falha de serviço :
Está implícito nessa declaração que um serviço deve estar no estado SERVICE_RUNNING antes de sua saída inesperada. Ou seja, as ações de falha não são invocadas para um serviço que não chega a SERVICE_RUNNING.
Em seu exemplo específico, o serviço XYZ falhou ao iniciar (ou seja, nunca fez a transição para SERVICE_RUNNING), portanto, nenhuma ação de falha foi chamada.