Como reiniciar automaticamente um serviço com falha no Linux

Em um sistema Linux, os serviços (também chamados de daemons) desempenham um papel crítico no gerenciamento de várias tarefas, como hospedagem web, gerenciamento de banco de dados e redes. No entanto, os serviços às vezes podem falhar ou parar devido a erros, uso elevado de recursos ou falhas inesperadas do sistema.

Para evitar períodos de inatividade e garantir operações suaves, os administradores de sistema podem configurar os serviços para reiniciarem automaticamente sempre que falharem, o que é especialmente útil para servidores web (Apache, Nginx), bancos de dados (MySQL, PostgreSQL) ou outras aplicações críticas que precisam estar disponíveis o tempo todo.

Neste guia, explicaremos como usar o systemd para configurar um serviço Linux para reiniciar automaticamente se parar.

Por que Reiniciar um Serviço Automaticamente?

Há várias razões pelas quais você pode querer reiniciar automaticamente um serviço no Linux:

  • Minimizar o tempo de inatividade: Se um serviço parar inesperadamente, as reinicializações automáticas garantem que os usuários experimentem interrupções mínimas.
  • Melhorar a confiabilidade: Serviços como servidores web, bancos de dados e processos em segundo plano devem estar sempre em execução.
  • Reduzir o trabalho manual: Sem automação, seria necessário verificar os serviços com frequência e reiniciá-los manualmente em caso de falha.
  • lidar com falhas inesperadas: Se um serviço falhar devido a bugs de software, limites de recursos ou erros do sistema, o systemd pode reiniciá-lo sem intervenção do administrador.

Agora, vamos passar pelas etapas para configurar reinicializações automáticas usando systemd.

Etapa 1: Identificar o Serviço Que Deseja Reiniciar

Antes de fazer alterações, você precisa saber o nome exato do serviço que deseja configurar, listando todos os serviços em execução.

systemctl list-units --type=service --state=running
List Running Linux Services

Se você já conhece o nome do serviço, pode verificar seu status.

systemctl status apache2
Check Running Service Status

Substitua apache2 pelo nome real do serviço que deseja gerenciar.

Etapa 2: Editar a Configuração do Serviço

O systemd permite que você modifique o comportamento do serviço usando arquivos de configuração personalizados. Em vez de modificar as configurações do sistema (que podem ser sobrescritas durante as atualizações), usaremos systemctl edit para criar um arquivo de substituição.

Execute o seguinte comando:

systemctl edit apache2

Isso abrirá um arquivo em branco no seu editor de texto padrão.

Se o arquivo não estiver vazio, você verá configurações existentes que podem ser modificadas. Caso contrário, será necessário adicionar a configuração de reinicialização necessária.

Open Systemd Service Configuration File

Etapa 3: Adicionar Configuração de Reinicialização do Systemd

No editor, adicione as seguintes linhas.

[Service]
Restart=always
RestartSec=5s

Explicação dessas configurações:

  • Restart=always – Garante que o serviço reinicie sempre que parar, independentemente do motivo.
  • RestartSec=5s – Informa ao systemd para esperar 5 segundos antes de reiniciar o serviço, o que pode prevenir loops de reinício rápido em caso de falhas repetidas.

Uma vez adicionado, salve e feche o arquivo.

Add Service Restart Configuration

Após fazer alterações em um serviço systemd, você precisa recarregar o systemd e reiniciar o serviço para garantir que a nova configuração seja aplicada:

sudo systemctl daemon-reload
sudo systemctl restart apache2

Para confirmar que o serviço agora está configurado para reiniciar automaticamente, execute:

sudo systemctl show apache2 | grep Restart

Se tudo estiver configurado corretamente, você deverá ver:

Restart=always

Passo 4: Teste o Reinício Automático no Linux

Para garantir que a configuração funcione, você pode parar o serviço manualmente e verificar se ele reinicia.

sudo systemctl stop apache2

Espere 5 segundos e, em seguida, verifique seu status.

sudo systemctl status apache2

Se o serviço estiver em execução novamente, o reinício automático está funcionando!

Opções Adicionais de Reinício

Dependendo de suas necessidades, o systemd fornece diferentes políticas de reinício:

  • Restart=always – O serviço sempre reinicia, mesmo que tenha sido parado manualmente.
  • Restart=on-failure – Reinicia apenas se o serviço sair com um erro (mas não se for parado manualmente).
  • Restart=on-abnormal – Reinicia o serviço se ele travar devido a um sinal (como uma falha de segmentação).
  • Restart=on-watchdog – Reinicia o serviço se ele expirar enquanto estiver em execução.

Você pode substituir Restart=always por qualquer uma dessas opções com base em suas necessidades.

Como Verificar os Logs de Serviços para Problemas

Se um serviço continuar falhando, é uma boa ideia verificar os logs usando o comando journalctl, que mostrará os logs do serviço dos últimos 10 minutos.

journalctl -u apache2 --since "10 minutes ago"

Para um fluxo de log em tempo real, use:

journalctl -u apache2 -f
Conclusão

A configuração de reinícios automáticos para serviços que falham garante que aplicativos críticos continuem funcionando sem intervenção manual. Ao usar as opções de reinício do systemd, você pode minimizar o tempo de inatividade, melhorar a estabilidade do sistema e reduzir a necessidade de solução de problemas manual.

Source:
https://www.tecmint.com/automatically-restart-service-linux/