Quero escrever um arquivo em lote que execute as seguintes operações:
- Verifique se um serviço está em execução
- Se estiver em execução, saia do lote
- Se não estiver em execução, inicie o serviço
Os exemplos de código que pesquisei até agora não funcionaram, então decidi não publicá-los.
O início de um serviço é feito por:
net start "SERVICENAME"
- Como posso verificar se um serviço está sendo executado e como fazer uma instrução if em um batchfile?
- Estou um pouco confuso. Qual é o argumento que devo passar para o início da rede? O nome do serviço ou seu nome de exibição?
Respostas:
Para verificar o estado de um serviço, use
sc query <SERVICE_NAME>
. Para se bloqueia em arquivos de lote, verifique a documentação .O código a seguir verificará o status do serviço
MyServiceName
e o iniciará se ele não estiver em execução (o bloco if será executado se o serviço não estiver em execução):Explicação do que faz:
Quanto à sua segunda pergunta, o argumento que você deseja transmitir
net start
é o nome do serviço, não o nome de exibição.fonte
sc query "SCardSvr"
partir de uma linha de comando?Para alternar um serviço, use o seguinte;
fonte
||
verdade é umOR
operador, embora neste caso seja funcionalmente umaELSE
instrução. Esta é uma diferença sutil, mas importante. Ainda tenho o meu +1 - faço isso o tempo todo em scripts de shell Unix / Linux, não sei por que nunca pensei em fazer isso em lotes do Windows.Você pode usar o seguinte comando para ver se um serviço está sendo executado ou não:
Quando eu o executo para meu antivírus NOD32, recebo:
Se fosse interrompido, eu obteria:
Você pode usar isso em uma variável para determinar se você usa NET START ou não.
O nome do serviço deve ser o nome do serviço, não o nome de exibição.
fonte
Isso deve resolver:
fonte
Versão independente do idioma.
fonte
Set ServiceName=Jenkins
porSet ServiceName=%~1
e chamá-lo assimwatch-service.bat "Jenkins"
Acabei de encontrar este tópico e gostaria de acrescentar à discussão se a pessoa não deseja usar um arquivo em lote para reiniciar serviços. No Windows, há uma opção se você acessar Serviços, propriedades do serviço e, em seguida, recuperação. Aqui você pode definir parâmetros para o serviço. Gostaria de reiniciar o serviço se o serviço parar. Além disso, você pode até mesmo fazer com que uma segunda tentativa de falha faça algo diferente, como reiniciar o computador.
fonte
Cuando se usar Windows en Español, el código debe quedar asi (ao usar Windows em espanhol, o código é):
Reemplazar MYSERVICE con el nombre del servicio that se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Substitua MYSERVICE pelo nome do serviço a ser processado. Você pode ver o nome do serviço nas propriedades do serviço.)
fonte
fonte
Para o servidor Windows 2012 abaixo é o que funcionou para mim. Substitua apenas "SERVICENAME" pelo nome do serviço real:
fonte
Eu também queria que um e-mail fosse enviado se o serviço fosse iniciado dessa forma, então adicionei um pouco ao código @Ic apenas pensei em postá-lo caso ajudasse alguém. Eu usei SendMail, mas existem outras opções de linha de comando. Como enviar um e-mail simples de um arquivo de lote do Windows?
fonte
Iniciando o serviço usando o script Powershell. Você pode vincular isso ao agendador de tarefas e acioná-lo em intervalos ou conforme necessário. Crie-o como um arquivo PS1, ou seja, um arquivo com a extensão PS1 e, em seguida, deixe esse arquivo ser acionado a partir do agendador de tarefas.
Para iniciar o serviço de parada
no agendador de tarefas se você estiver usando no servidor use isso em argumentos
-noprofile -executionpolicy bypass -file "C: \ Service Restart Scripts \ StopService.PS1"
verifique executando o mesmo no cmd se funciona, deve funcionar no agendador de tarefas também
fonte
fonte
Relacionado com a resposta de @DanielSerrano, recentemente fui pouco por localização do
sc.exe
comando, nomeadamente em espanhol. Minha proposta é apontar a linha e o token que contém o estado de serviço numérico e interpretá-lo, que deve ser muito mais robusto:Testado com:
fonte
Talvez uma maneira muito mais simples? Apenas adicionando à lista de respostas aqui:
fonte