Um banco de dados que deixa de aceitar conexões depois de uma reinicialização, uma impressão que para em todas as estações e uma rotina que só funciona com alguém conectado ao servidor costumam envolver os serviços do Windows. A configuração de cada serviço define quando ele inicia, com qual conta roda e o que acontece quando falha.
O que é um serviço
Um serviço é um programa que o Windows executa em segundo plano, sem janela, e que pode iniciar junto com o computador, antes de qualquer usuário entrar. O MySQL, o spooler de impressão, o Windows Update e o compartilhamento de arquivos funcionam como serviços.
Um serviço do Windows e um serviço de rede são ideias diferentes. O serviço de rede é um programa que espera conexões em uma porta, e muitos serviços do Windows fazem isso, como o MySQL na porta 3306. Outros serviços do Windows não esperam conexões, como o Windows Update, que apenas busca as atualizações, e um programa aberto por um usuário também pode esperar conexões em uma porta sem ser um serviço do Windows.
Desde o Windows Vista, os serviços rodam em uma sessão separada, sem acesso à área de trabalho dos usuários. Um programa feito para ser usado na tela, quando instalado como serviço, não consegue mostrar as mensagens que abriria e pode ficar parado à espera de um clique que ninguém consegue dar.
O nome do serviço
Cada serviço tem dois nomes. O nome de exibição aparece na tela de serviços, como Spooler de Impressão. O nome do serviço, mais curto, é o usado nos comandos, como Spooler, e aparece na aba Geral das propriedades. No cenário, o serviço do banco de dados se chama MySQL nos dois casos, mas os nomes dependem da instalação.
A tela de serviços
A tela de serviços abre pelo comando services.msc e mostra, para cada serviço, o estado, o tipo de inicialização e a conta usada. Os tipos de inicialização são quatro:
- Automático: o serviço inicia junto com o Windows;
- Automático com atraso: o serviço inicia alguns minutos depois dos automáticos, para aliviar a inicialização, e a tela mostra o atraso entre parênteses;
- Manual: o serviço inicia só quando um programa ou uma pessoa pede;
- Desativado: o serviço não inicia, nem quando pedido.
Um serviço em Manual, iniciado à mão, funciona até a próxima reinicialização e, depois dela, fica parado. Esse é o caso de um banco de dados que funcionava e deixou de aceitar conexões na manhã seguinte a uma atualização do Windows.
As propriedades de um serviço
A janela de propriedades de um serviço reúne quatro abas:
- Geral: o nome do serviço, o caminho do executável com os parâmetros, o tipo de inicialização e os botões para iniciar e parar;
- Logon: a conta com que o serviço roda;
- Recuperação: as ações do Windows quando o serviço falha;
- Dependências: os serviços de que este depende e os que dependem dele.
No caminho do executável do MySQL, o parâmetro --defaults-file indica qual arquivo my.ini o serviço lê ao iniciar. Em um servidor com mais de uma instalação, esse parâmetro mostra qual configuração está em uso.
Na aba Recuperação, o Windows pode reiniciar o serviço depois de uma falha. A reinicialização automática mantém o serviço disponível, mas esconde as quedas repetidas, que continuam registradas no log do próprio programa e no Visualizador de Eventos.
Na aba Dependências, um serviço só inicia depois dos serviços de que depende, e a parada de um serviço exige a parada dos que dependem dele.
A conta do serviço
Todo serviço roda com uma conta, e essa conta define o que ele acessa no computador e na rede:
- Sistema Local: a conta com mais poderes no computador, usada por muitos serviços;
- Serviço Local: uma conta com poucas permissões no computador, que acessa a rede de forma anônima;
- Serviço de Rede: uma conta com poucas permissões no computador, que acessa a rede em nome do próprio computador;
- Conta de usuário: uma conta comum, local ou do domínio, com a senha gravada na configuração do serviço.
Em uma rede com domínio, o Sistema Local e o Serviço de Rede acessam os outros computadores em nome do próprio computador, e o servidor pode dar permissão a essa conta. Em uma rede sem domínio, comum em lojas pequenas, os outros computadores não reconhecem a conta do computador. Um serviço que grava em uma pasta compartilhada de outro computador, nesse caso, roda com uma conta de usuário, e o computador de destino precisa ter uma conta com o mesmo nome e a mesma senha, com permissão na pasta.
Quando a senha da conta de usuário muda ou expira, o serviço deixa de iniciar por falha de logon, e a senha nova precisa ser informada na aba Logon. O serviço também não enxerga as unidades mapeadas nem as impressoras adicionadas pelos usuários, porque esses itens pertencem às contas dos usuários, e o caminho de rede completo, como \\servidor-loja\SISTEMA, funciona quando a conta do serviço tem permissão.
Os comandos
No prompt de comando aberto como administrador, os serviços são consultados e configurados pelo nome do serviço:
sc query MySQL: mostra o estado do serviço, como RUNNING, em execução, ou STOPPED, parado;sc queryex MySQL: mostra também o PID do processo do serviço;sc qc MySQL: mostra a configuração, com o caminho do executável, o tipo de inicialização, a conta e as dependências;sc config MySQL start= auto: muda o tipo de inicialização para automático, com um espaço obrigatório depois do sinal de igual.
No Windows PowerShell, o nome sc é um apelido de outro comando, e o programa precisa ser chamado como sc.exe. O PowerShell também tem comandos próprios para os serviços:
Get-Service MySQL: mostra o estado do serviço;Restart-Service MySQL: para e inicia de novo o serviço;Get-CimInstance Win32_Service -Filter "Name='MySQL'" | Select-Object Name, State, StartMode, StartName, PathName, ProcessId: mostra o estado, o tipo de inicialização, a conta, o caminho do executável e o PID.
Os erros ao iniciar
Quando um serviço não inicia, a mensagem traz um código que indica onde a falha aconteceu:
- Erro 5: acesso negado, em geral porque o comando foi executado sem a permissão de administrador;
- Erro 2: o executável indicado na configuração do serviço não foi encontrado, como depois de uma pasta movida ou de uma desinstalação incompleta;
- Erro 1058: o serviço está desativado;
- Erro 1068: um serviço de que ele depende não iniciou;
- Erro 1069: a conta do serviço não conseguiu entrar no Windows, em geral por uma senha alterada ou expirada;
- Erro 1053: o serviço não respondeu ao pedido de início dentro do prazo;
- Erro 1067: o processo do serviço iniciou e terminou de forma inesperada.
Os erros 1053 e 1067 indicam que o Windows iniciou o programa, e a causa costuma estar no próprio programa. No MySQL, uma opção inválida no my.ini, uma pasta de dados inacessível ou a porta 3306 ocupada por outro programa encerram o serviço logo depois do início, e o log de erros do MySQL registra o motivo. As falhas dos serviços também ficam no Visualizador de Eventos, no log Sistema, com a origem Service Control Manager.
No suporte
Diante de um serviço que não inicia, convém ler o código do erro, conferir o tipo de inicialização, a conta da aba Logon e o caminho do executável, e procurar a causa no log do próprio programa. Um programa testado na tela, por um usuário conectado, não reproduz as condições do serviço, que roda com outra conta, sem as unidades mapeadas e sem acesso à área de trabalho.
Para guardar
- Um serviço é um programa que o Windows inicia e controla sem depender de um usuário conectado.
- Os comandos usam o nome do serviço, e a tela de serviços mostra o nome de exibição.
- Um serviço em Manual fica parado depois de uma reinicialização.
- A conta do serviço define o acesso ao computador e à rede, e o serviço não enxerga as unidades mapeadas.
- Os erros 1053 e 1067 apontam para o próprio programa, e o log dele mostra a causa.
Depois de uma atualização do Windows com reinicialização, nenhuma estação se conecta ao banco, e o serviço do MySQL está parado. O que conferir antes de iniciar o serviço?
O tipo de inicialização. Um serviço em Manual não inicia sozinho depois da reinicialização. Se o tipo é Automático e o serviço está parado, o log de erros do MySQL e o Visualizador de Eventos mostram por que ele não iniciou.
Um serviço de envio de arquivos roda como Sistema Local e grava normalmente em uma pasta local, mas recebe acesso negado ao gravar em \\servidor-loja\SISTEMA. O que explica a falha?
Em uma rede sem domínio, o servidor da loja não reconhece a conta do computador de origem, e o acesso do serviço pela rede é negado. O serviço precisa rodar com uma conta de usuário, e o servidor da loja precisa ter uma conta com o mesmo nome e a mesma senha, com permissão no compartilhamento e na pasta.