Tutoriel Linux

Encontrar por que um serviço systemd está falhando

Débutant3 min de lecture

Um serviço que falha em failed não precisa de uma reinicialização imediata. Em um servidor, esse hábito às vezes apaga a mensagem que explica a falha ou reinicia um programa com uma configuração ainda inválida.

Comece identificando a unidade afetada, leia seu estado e seu log, e então corrija a causa. O reinício vem depois.

Tux examina uma luz de erro em um servidor Linux
Um serviço que falha deve ser diagnosticado em seu estado e seu log antes de ser reiniciado.

Listar as unidades realmente falhas

Este comando exibe os serviços e unidades que o systemd considera como falhos:

systemctl --failed

Anote o nome completo, por exemplo nginx.service ou minha-aplicacao.service. Uma unidade exited não está necessariamente com problemas: alguns serviços executam uma tarefa curta e então param normalmente. O status failed indica que uma inicialização, um comando de controle ou um processo monitorado terminou com erro.

Para rever os serviços ativos, parados e seus estados, consulte também a lista de serviços com systemctl.

Ler o estado do serviço antes de qualquer reinicialização

Substitua nginx pela sua unidade. A opção --no-pager imprime o resultado diretamente no terminal, evitando ficar no less em uma sessão SSH.

sudo systemctl status nginx --no-pager

Preste atenção principalmente na linha Active:, no código de saída e nas últimas linhas exibidas. Uma porta já ocupada, um caminho ausente, um certificado ilegível ou uma diretiva mal escrita aparecem frequentemente aqui. Se o serviço inicia um binário que possui seu próprio validador, inicie primeiro este validador. Para Nginx, por exemplo:

sudo nginx -t

Não execute este comando em uma máquina que não está usando Nginx. Cada serviço tem sua própria sintaxe de verificação.

Subir ao mensagem de erro com journalctl

systemctl status mostra apenas um extrato. O log da unidade fornece o contexto completo:

sudo journalctl -u nginx -b --no-pager
sudo journalctl -u nginx -n 50 --no-pager

-b limita a pesquisa à inicialização atual. -n 50 mantém as 50 últimas linhas, caso a falha seja mais antiga. Para acompanhar um reinício ao vivo, use sudo journalctl -fu nginx em uma segunda sessão SSH. O guia journalctl e as mensagens da última inicialização ajuda a ampliar o diagnóstico quando o erro afeta vários serviços.

Corrigir, reiniciar e verificar

Após uma modificação no arquivo de unidade ou em um drop-in do systemd, recarregue a configuração. Esta etapa não reinicia o serviço.

sudo systemctl daemon-reload
sudo systemctl restart nginx
systemctl is-active nginx
systemctl --failed

is-active deve responder active. Se o serviço escuta em uma porta, verifique também a porta e faça um teste pelo cliente correto. Uma resposta active não garante que uma aplicação web, um proxy ou um banco de dados já aceitam requisições.

Em um serviço crítico, mantenha uma segunda sessão SSH aberta antes de uma reinicialização e copie o erro exato em seu ticket ou notas. Você evitará ter que repetir o mesmo diagnóstico no próximo incidente.

sudo apt update && sudo apt upgrade