Serviço de pausa do Windows em vez de reiniciá-lo quando o arquivo em lote for chamado do agendador de tarefas

1

Eu configurei uma tarefa no Agendador de Tarefas do Windows para ser executada em um horário específico todos os dias. A tarefa simplesmente executa um arquivo em lote que eu criei para reiniciar meu serviço do Windows. Este é o conteúdo desse arquivo:

net stop "MyService"
net start "MyService"

Isso parece funcionar bem na maior parte do tempo, mas ocasionalmente o serviço realmente se pausará, em vez de parar / iniciar. Eu voltarei a isto mais tarde e só estará sentando lá, pausado.

Por que o agendador de tarefas pausaria meu serviço, em vez de iniciá-lo, e como posso remediar isso?

    
por Jim 02.10.2014 / 22:12

3 respostas

1

EXE's convertidos em serviços por utilitários como o NSSM estão repletos de chances de falha.

Até mesmo a NSSM aponta isso em sua página inicial :

"...if your application is well-behaved you can configure nssm to absolve all responsibility for restarting it and let Windows take care of recovery actions."

Parece que seu aplicativo não é "bem comportado".

Tente usando o NSSM para parar / iniciar e reiniciar o serviço ou, se isso não ajudar, reescreva / recompile o programa como um serviço real do Windows.

    
por 02.10.2014 / 22:41
1

Acredito que esse problema tenha sido causado pelo próprio serviço, mas há uma solução alternativa com o comando "SC query".

C:\Windows>sc query "MyService" | find "STATE"
    STATE              : 3  STOP_PENDING

É possível anexar uma rotina de verificação em seu arquivo de lote para verificar novamente o status do serviço após ter algum intervalo, eliminar o processo de serviço (taskkill / f) se ele estiver suspenso e reiniciar o serviço (net start).

Além disso, se você usar o NSSM para ocultar a janela, não precisará usar o NSSM e poderá atingir o mesmo objetivo apenas com o Agendador de Tarefas. (Mas se você apontar algo diferente - por favor, ignore o seguinte.)

Estaéumapartedaguia"Geral" na propriedade da tarefa. Se você selecionar "Executar se o usuário está conectado ou não", isso será executado a partir da sessão 0, que não mostrará nenhuma janela para você. Então, o que você precisa fazer na sua tarefa agendada é matar / reiniciar o próprio processo de destino como você faz agora. Isso funcionará de forma mais robusta.

    
por 03.10.2014 / 01:53
1

Você pode ver isso se você usou o NSSM para fazer um serviço logstash, e você atualizou sua instalação Java desde que você criou o arquivo .bat que o NSSM está usando para iniciar seu serviço, você pode encontrar o caminho para java. exe no seu arquivo de lote não é mais válido.

    
por 26.10.2016 / 00:58