Configurar ações de recuperação a serem executadas quando um serviço falhar

10

Eu instalei muitos de nossos serviços escritos personalizados nas caixas do Windows (não importa se XP, Server, Vista). Eu sempre configuro para "Reiniciar o serviço" nas 1as, 2as e falhas subseqüentes. Mas eu nunca vi esse trabalho; o serviço simplesmente para (devido a um erro ou algo no código), mas não é reiniciado.

Acabei de notar a caixa de seleção "Ativar ações para paradas com erros". Isso precisa ser verificado para que a recuperação tenha efeito se a falha foi causada por um erro?

obrigado, Mark.

M Schenkel
fonte

Respostas:

3

Se seus serviços estão parando devido a um erro, que é registrado pelo Windows, sim, é necessário marcar 'Ativar ações para interrupções com erros'; caso contrário, não funcionará.

Se você não marcar isso, ele somente reiniciará os serviços que foram interrompidos por razões legítimas ou desconhecidas.

Sam Cogan
fonte
1
Obrigado - eu meio que percebi isso. Mas eu pensaria que "Erro" seria a mesma coisa que uma "falha" e, portanto, o serviço deveria ter sido iniciado sem marcar a caixa.
M Schenkel
Parece um pouco estranho, eu concordo, pois a maioria das razões pelas quais um serviço falharia, você pensaria que seria um erro.
Sam Cogan
2
Nenhuma ação de recuperação deve ser acionada em serviços que foram interrompidos por razões "legítimas". Essa resposta ainda confunde os termos "parar" e "fracassar".
matpop
3
Quem quer que tenha escrito essa linguagem na Microsoft deve ser açoitado infinitamente por sua incompetência.
precisa saber é o seguinte
16

A caixa de seleção "Ativar ações para paradas com erros" foi introduzida no Windows Vista e Windows Server 2008, fornecendo uma linha de documentação única e embaraçosa :

Selecione Ativar ações para paradas com erros para acionar as ações de recuperação que o serviço parou com um erro.

O SC.exe programa também foi atualizado para oferecer um novo comando: failureflag. A documentação mostra um exemplo ruim e não se aplica realmente ao Windows Server 2003, mas informa que o comando:

Especifica se as ações de recuperação serão acionadas quando um serviço parar como resultado de um erro.

Portanto, sc failureflagmarque a caixa de seleção e será usada para definir o mesmo sinalizador.
Vamos digitar sc failureflagno prompt de comando, finalmente obtemos uma descrição bastante decente:

Altera a configuração do sinalizador de ações de falha de um serviço. Se essa configuração for 0 (padrão), o Service Control Manager (SCM) habilitará ações de falha configuradas no serviço somente se o processo do serviço terminar com o serviço em um estado diferente de SERVICE_STOPPED. Se essa configuração for 1, o SCM habilitará ações de falha configuradas no serviço se o serviço entrar no estado SERVICE_STOPPED com um código de saída do Win32 diferente de 0, além da finalização do processo de serviço, conforme acima. Essa configuração será ignorada se o serviço não tiver nenhuma ação de falha configurada.

Uma descrição semelhante pode ser encontrada aqui .
Portanto, a resposta correta para a pergunta original é: as ações de recuperação configuradas sempre entram em vigor quando seu serviço não é finalizado no estado SERVICE_STOPPED. "Ativar ações para paradas com erros" deve ser verificado se você precisar ativar as ações de recuperação também quando seu serviço entrar no estado SERVICE_STOPPED, desde que o código de saída não seja 0 (erro).

matpop
fonte
2
Parabéns por uma resposta muito útil!
Tim Lovell-Smith