O Windows Services não inicia automaticamente após a reinicialização?

10

Temos alguns serviços do Windows escritos em .NET. Eles iniciam bem manualmente no mmc de serviços, mas, apesar de estarem definidos como Automático, nunca iniciam ao ligar (ou reiniciar) a máquina.

Atualização No log de eventos, em vez de ver "xyz iniciado", ao lado de todos os outros serviços iniciados, apenas vejo "O serviço xyz entrou no estado parado". e um erro separado que diz "Foi atingido um tempo limite (30000 milissegundos) enquanto aguardava uma resposta de transação do serviço slsvc.".

Se eu iniciá-los manualmente, recebo uma entrada normal no log de eventos conforme o esperado e tudo está bem - até o próximo patch do Windows Update que força uma reinicialização e todos os serviços são desativados novamente.

Alguma ideia? Eu tentei configurá-los para o início atrasado sem diferença aparente.

James Crowley
fonte
Certa vez, tive um problema muito semelhante com algumas tarefas agendadas, que acabei descobrindo que era possível recriar alterando o nome de usuário que a tarefa executava como após a criação. Eu descobri que poderia resolver facilmente o problema simplesmente excluindo e recriando as tarefas. Definitivamente vale a pena uma abordagem semelhante com isso - tente remover o serviço e recriá-lo. Isso pode ajudar se você não tiver certeza de como fazer isso. Para sua informação, o problema das tarefas agendadas não acontece mais, acho que alguma atualização em algum momento foi corrigida.
precisa saber é o seguinte
Gostaria de saber se eles estão falhando ao iniciar porque dependem de outro serviço (que ainda não foi iniciado). Você consegue ver uma falha de inicialização do serviço no log do sistema?
newmanth 9/01/12
@DaveRandom a reinstalação realmente acontece cada vez que implantar uma nova versão, por isso não parece que a remoção / adição resolve o problema, infelizmente
James Crowley
@ Nova pergunta atualizada com alguns novos detalhes - Acontece que havia entradas de log de eventos que eu havia perdido
406 James Crowley
Percebi no seu comentário à resposta de Rob que o .NET é a única dependência. Você sabe se os desenvolvedores usaram APIs de terceiros no desenvolvimento do serviço? Se sim, talvez haja algum mecanismo de licenciamento bloqueado?
newmanth

Respostas:

3

Existe uma correção para isso. Consulte: http://support.microsoft.com/kb/922918

O problema é que um serviço pode exigir LDAP ou outro acesso remoto e está sofrendo atrasos por causa disso. Isso pode acontecer especialmente quando o servidor está iniciando. Estendendo o atraso, você pode garantir que o serviço será iniciado.

Melhor seria, claro, solucionar os problemas de por que esse serviço leva tanto tempo para iniciar. Seu ambiente não está dimensionado? Você tem problemas de desempenho em um serviço que está sendo pesquisado pelo serviço que está atrasado para iniciar?

David Biot
fonte
Como especificamente os serviços iniciados podem ser solucionados? Existe alguma maneira de habilitar o log detalhado?
Kenny Evitt
1

O que você quer dizer quando diz "temos alguns serviços do Windows"? Isso sugere que eles foram criados internamente por alguém da sua organização? Nesse caso, você está em uma posição melhor para depurá-los do que qualquer outra pessoa aqui - que dependências esses serviços têm nos componentes do Windows e seus programadores consideram testar a disponibilidade desses serviços e aguardar que eles fiquem online quando seus serviços iniciarem ?

Você já pensou em definir esses serviços como uma dependência do serviço de licenciamento de software (é isso que é slsvc )?

a partir de http://support.microsoft.com/kb/193888

Para criar uma nova dependência, selecione a subchave que representa o serviço que você deseja atrasar, clique em Editar e, em seguida, clique em Adicionar valor. Crie um novo nome de valor "DependOnService" (sem as aspas) com um tipo de dados REG_MULTI_SZ e, em seguida, clique em OK. Quando a caixa de diálogo Dados aparecer, digite o nome ou os nomes dos serviços que você prefere iniciar antes deste serviço com uma entrada para cada linha e clique em OK.

O nome do serviço que você digitaria na caixa de diálogo Dados é o nome exato do serviço, conforme exibido no registro, na chave Serviços.

Quando o computador inicia, ele usa esta entrada para verificar se o serviço ou serviços listados neste valor foram iniciados antes de tentar iniciar o serviço dependente.

Rob Moir
fonte
Obrigado Rob - eles são internos - mas a única dependência é o framework .NET, que não acredito que seja executado como um serviço. Ele não requer qualquer outra coisa na inicialização ...
James Crowley
0

Tente com isto:

Execute o seguinte comando para definir um evento acionador que se adapte ao seu ambiente. Neste exemplo, o comando determina se um endereço IP é fornecido a um host e, em seguida, inicia ou interrompe o serviço.

sc triggerinfo w32time start / networkon stop / networkoff

onde w32Time é o nome do seu serviço

ou tente isso

https://support.microsoft.com/en-us/kb/922918

Fernando Diaz Toledano
fonte