Como criar um serviço systemd personalizado no seu VPS
Oi! Aqui é a Sensei da GeHost 🌱 Se você tem uma aplicação própria rodando no seu VPS — um bot, uma API em Node.js, um script em Python, um worker que processa filas — e está cansado de precisar entrar via SSH toda vez pra "dar um start" nela manualmente, este guia é pra você. Vamos aprender, passo a passo, a transformar essa aplicação em um serviço systemd: ele passa a iniciar sozinho com o servidor, reinicia se cair, e você consegue ver o status e os logs com comandos simples.
O que é o systemd e por que ele ajuda
O systemd é o "gerente de processos" da maioria das distribuições Linux modernas (Ubuntu, Debian, CentOS, AlmaLinux, entre outras). Ele é o responsável por ligar, desligar e monitorar os serviços do sistema — e você pode ensiná-lo a cuidar da sua aplicação também. As vantagens de fazer isso:
- A aplicação sobe automaticamente quando o servidor reinicia;
- Se ela travar ou cair, o systemd pode reiniciar sozinho;
- Você ganha comandos padronizados:
start,stop,restart,status; - Os logs ficam organizados e consultáveis com o
journalctl.
Este guia parte do princípio de que você já tem acesso via SSH ao seu servidor com permissões administrativas (root ou sudo). Se tiver qualquer dúvida sobre o tipo de acesso do seu contrato, dá uma olhada no painel.gehost.com.br ou fala com o nosso suporte antes de seguir.
Pré-requisitos
- Acesso SSH ao servidor com permissão para usar
sudo; - Sua aplicação já funcionando manualmente (ex.: você consegue rodar
python3 app.pyounode index.jse ela funciona); - Saber o caminho completo onde os arquivos da aplicação estão salvos (ex.:
/home/seuusuario/minha-app).
Passo 1 — Confirme como sua aplicação é iniciada
Antes de criar o serviço, teste manualmente o comando exato que coloca sua aplicação no ar. Por exemplo:
- Python:
/usr/bin/python3 /home/seuusuario/minha-app/app.py - Node.js:
/usr/bin/node /home/seuusuario/minha-app/index.js
Dica: use which python3 ou which node para descobrir o caminho completo do interpretador. O systemd prefere caminhos absolutos (completos), então evite atalhos como só "python3".
Passo 2 — Crie o arquivo de unit
Todo serviço systemd é descrito por um arquivo chamado unit file, com extensão .service. Vamos criar o nosso:
- Conecte no servidor via SSH;
- Rode o comando abaixo (troque
minhaapppelo nome que quiser dar ao seu serviço):
sudo nano /etc/systemd/system/minhaapp.service
Isso vai abrir um editor de texto vazio, pronto pra receber a configuração.
Passo 3 — Preencha as seções do serviço
Cole o conteúdo abaixo, ajustando os campos em negrito pra realidade da sua aplicação:
[Unit]
Description=Minha aplicação personalizada
After=network.target
[Service]
User=seuusuario
WorkingDirectory=/home/seuusuario/minha-app
ExecStart=/usr/bin/python3 /home/seuusuario/minha-app/app.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Entendendo cada bloco:
- [Unit] — descrição do serviço e quando ele deve iniciar (aqui, depois que a rede estiver disponível);
- [Service] — o "coração" do arquivo: qual usuário roda o processo, em qual pasta, qual comando executar, e o que fazer se ele cair (
Restart=on-failurereinicia automaticamente em caso de erro); - [Install] — diz ao systemd para ligar esse serviço junto com o processo normal de boot do sistema.
Dica de ouro: nunca use o usuáriorootemUser=a menos que sua aplicação realmente precise disso. Rodar com um usuário comum é mais seguro — se algo der errado na aplicação, o estrago fica bem mais contido.
Salve o arquivo (no nano: Ctrl+O, Enter, depois Ctrl+X para sair).
Passo 4 — Recarregue o systemd e habilite o serviço
Toda vez que você cria ou edita um arquivo .service, é preciso avisar o systemd:
sudo systemctl daemon-reload
Agora, habilite o serviço para que ele suba automaticamente nos próximos reinícios do servidor:
sudo systemctl enable minhaapp
Passo 5 — Inicie e verifique se está tudo certo
- Inicie o serviço:
sudo systemctl start minhaapp - Confira o status:
sudo systemctl status minhaapp - Se precisar acompanhar os logs em tempo real:
sudo journalctl -u minhaapp -f
Se o status aparecer como active (running) em verde, parabéns — sua aplicação agora é um serviço de verdade! 🎉
Comandos do dia a dia
- Parar o serviço:
sudo systemctl stop minhaapp - Reiniciar:
sudo systemctl restart minhaapp - Desabilitar a inicialização automática:
sudo systemctl disable minhaapp
Problemas comuns
"Failed to start" ou status "failed": quase sempre é caminho errado noExecStartou permissão do usuário na pasta. Rodesudo journalctl -u minhaapp -n 50para ver as últimas 50 linhas do log e entender a causa exata do erro.
Serviço reinicia em loop: geralmente é um erro dentro da própria aplicação (ex.: porta já em uso, variável de ambiente faltando). O journalctl também ajuda a identificar isso.
Encerrando com carinho
Configurar um serviço systemd dá aquele upgrade de profissionalismo pro seu projeto: nada de esquecer de ligar a aplicação depois de uma manutenção, nada de perder o processo porque a sessão SSH caiu. Se em algum passo o terminal te der um erro, respira, lê a mensagem com calma (o systemd costuma ser bem direto) e, se travar, chama a nossa equipe pelo painel.gehost.com.br — estamos por aqui pra ajudar. 💚