Como configurar reinício automático de um serviço que trava usando systemd imprimir

  • 0

Reinício automático de serviços com systemd: seu servidor nunca mais "trava" sem você saber

Oi! Aqui é a Sensei da GeHost 🧙‍♀️ Você já passou por aquele perrengue de um serviço (um site, uma API, um bot) travar do nada e só voltar a funcionar quando alguém percebe e reinicia na mão? Pois é, dá pra resolver isso automaticamente com o systemd, o gerenciador de serviços presente na maioria dos servidores Linux. Vamos configurar juntos, com calma, passo a passo.

Atenção antes de começar: este guia usa comandos de terminal (SSH) com privilégios administrativos. Ele se aplica a servidores VPS ou dedicados com acesso root. Nos planos de hospedagem compartilhada em cPanel da GeHost o acesso ao servidor é gerenciado por nós — nesse caso, é só abrir um chamado de suporte descrevendo o serviço que está travando que a gente cuida disso pra você. Se você tem um VPS próprio, siga o passo a passo abaixo. Na dúvida sobre qual é o seu tipo de plano, confira no painel do cliente.

O que é o systemd, em palavras simples

Pense no systemd como o "gerente geral" do servidor: ele liga, desliga e monitora os programas (chamados de serviços) que rodam em segundo plano. A boa notícia é que dá pra ensinar esse gerente a ficar de olho em um serviço específico e reiniciá-lo sozinho, na hora, se ele travar ou cair.

Passo 1 — Localize (ou crie) o arquivo do serviço

Cada serviço gerenciado pelo systemd tem um arquivo de configuração chamado unit file, terminado em .service. Eles ficam normalmente em:

  • /etc/systemd/system/ — para serviços criados manualmente (o mais comum no seu caso)
  • /lib/systemd/system/ — para serviços instalados por pacotes do sistema

Para editar (ou criar) o arquivo do seu serviço, use:

sudo nano /etc/systemd/system/meuservico.service

Troque meuservico pelo nome real da sua aplicação (ex.: meubot.service, minhaapi.service).

Passo 2 — Configure o reinício automático

Dentro do arquivo, você vai ter uma estrutura parecida com esta. O segredo do reinício automático está nas linhas Restart e RestartSec:

[Unit]
Description=Meu Serviço Incrível
After=network.target

[Service]
ExecStart=/caminho/para/seu/programa
Restart=on-failure
RestartSec=5
User=seu_usuario

[Install]
WantedBy=multi-user.target

Vamos entender o que cada linha importante faz:

  • Restart=on-failure — diz ao systemd "reinicie esse serviço sempre que ele travar ou fechar com erro". Também existem as opções always (reinicia em qualquer situação, até quando é parado intencionalmente) e on-abnormal.
  • RestartSec=5 — espera 5 segundos antes de tentar reiniciar. Isso evita que, se o problema for grave, o servidor fique tentando reiniciar sem parar (o que pode sobrecarregar a máquina).
  • User=seu_usuario — roda o serviço com um usuário específico, por segurança (evite usar o usuário root se não for necessário).
Dica da Sensei: se o seu serviço trava com muita frequência em pouco tempo, vale adicionar também StartLimitIntervalSec=0 na seção [Unit]. Isso remove o limite padrão de tentativas do systemd, que por segurança desiste de reiniciar depois de algumas falhas seguidas em um curto intervalo.

Passo 3 — Aplique as mudanças

Depois de salvar o arquivo, é preciso avisar o systemd que algo mudou e então (re)ativar o serviço:

  1. Recarregue as configurações do systemd:
    sudo systemctl daemon-reload
  2. Habilite o serviço para iniciar automaticamente com o servidor:
    sudo systemctl enable meuservico.service
  3. Reinicie o serviço para aplicar as mudanças agora:
    sudo systemctl restart meuservico.service

Passo 4 — Confirme que está tudo funcionando

Verifique o status do serviço com:

sudo systemctl status meuservico.service

Você deve ver algo como active (running) em verde. Se quiser testar o reinício automático "na prática", você pode simular uma falha derrubando o processo manualmente e observando se o systemd o traz de volta sozinho em poucos segundos.

Para acompanhar os logs (registros) do serviço em tempo real, útil pra entender por que ele está travando:

sudo journalctl -u meuservico.service -f

Resumo rápido

  • Edite o arquivo .service em /etc/systemd/system/
  • Adicione Restart=on-failure e RestartSec=5
  • Rode daemon-reload, enable e restart
  • Confira com status e journalctl
Precisa de ajuda? Se você não tem certeza sobre qual serviço editar, ou algo não sair como esperado, é só chamar o suporte da GeHost pelo painel do cliente — a gente te ajuda com prazer! 💙

Esta resposta lhe foi útil?

« Retornar