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) eon-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
rootse não for necessário).
Dica da Sensei: se o seu serviço trava com muita frequência em pouco tempo, vale adicionar tambémStartLimitIntervalSec=0na 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:
- Recarregue as configurações do systemd:
sudo systemctl daemon-reload
- Habilite o serviço para iniciar automaticamente com o servidor:
sudo systemctl enable meuservico.service
- 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
.serviceem/etc/systemd/system/ - Adicione
Restart=on-failureeRestartSec=5 - Rode
daemon-reload,enableerestart - Confira com
statusejournalctl
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! 💙