Como manter uma aplicação rodando em segundo plano com PM2 ou systemd
Oi! Aqui é a Sensei da GeHost 🥋 Hoje eu vou te ensinar uma coisa que separa quem só "roda um script" de quem mantém uma aplicação de verdade no ar: como fazer ela continuar rodando **sozinha**, mesmo depois que você fecha o terminal, reinicia o servidor ou dá aquele soluço de conexão.
Se você já rodou algo como node app.js ou python app.py direto no terminal e, ao fechar a janela, a aplicação simplesmente morreu — é exatamente esse problema que vamos resolver hoje. Vem comigo, passo a passo, sem pressa.
Dica da Sensei: esse guia é para quem tem acesso a um ambiente com terminal/SSH (ex.: VPS ou ambiente de aplicação). Se o seu plano é hospedagem compartilhada tradicional (cPanel), fale com o suporte pra confirmar se a sua aplicação roda nesse tipo de ambiente antes de seguir.
Por que a aplicação "morre" quando eu fecho o terminal?
Todo processo que você inicia direto no terminal fica "amarrado" àquela sessão. Quando a sessão fecha (você fecha o terminal, cai a conexão SSH, o servidor reinicia), o processo é encerrado junto. É como deixar uma lâmpada ligada numa tomada que depende do seu celular estar por perto — assim que você se afasta, ela apaga.
Para resolver isso, existem duas ferramentas queridas no mundo dos desenvolvedores: PM2 e systemd. Ambas fazem a mesma missão: manter sua aplicação viva, reiniciá-la se ela travar, e ligá-la de novo automaticamente se o servidor reiniciar.
Opção 1: PM2 (a mais simples, ótima para Node.js)
O PM2 é um "gerenciador de processos" muito popular, principalmente em aplicações Node.js. Ele é simples de instalar e usar — ótimo ponto de partida se você não tem muita intimidade com administração de servidor.
- Instale o PM2 globalmente (geralmente via gerenciador de pacotes do Node, como o npm):
npm install -g pm2 - Inicie sua aplicação com o PM2 em vez do comando tradicional:
pm2 start app.js --name "minha-aplicacao"
Dar um nome (--name) ajuda muito na hora de identificar sua aplicação no meio de outras. - Confirme que está rodando:
pm2 status
Você vai ver uma tabela com o nome da aplicação, status (online), uso de memória e quantas vezes ela reiniciou. - Faça o PM2 sobreviver a um reinício do servidor — sem esse passo, se o servidor desligar e ligar de novo, o PM2 não volta sozinho:
pm2 startup
Esse comando vai te mostrar uma linha de comando específica pra copiar e executar (ela varia de sistema pra sistema) — copie e rode exatamente o que ele indicar. - Salve a lista de aplicações atuais para o PM2 lembrar delas depois de reiniciar:
pm2 save
Prontinho! Alguns comandos do dia a dia que vale guardar:
pm2 logs minha-aplicacao— para ver os logs (o que a aplicação está "dizendo") em tempo real.pm2 restart minha-aplicacao— reinicia a aplicação (útil após uma atualização de código).pm2 stop minha-aplicacao— para a aplicação sem removê-la da lista.pm2 delete minha-aplicacao— remove de vez a aplicação do gerenciamento do PM2.
Opção 2: systemd (mais robusta, funciona para qualquer linguagem)
O systemd já vem embutido na maioria dos sistemas Linux modernos e não é exclusivo de Node.js — funciona igualmente bem com Python, Go, Java, ou o que for. É um pouquinho mais técnico de configurar, mas é extremamente confiável e é o padrão usado por muitos serviços do próprio sistema operacional.
- Crie um arquivo de serviço. Ele descreve pro sistema como iniciar, parar e cuidar da sua aplicação. Normalmente fica em um caminho como
/etc/systemd/system/minha-aplicacao.service. - Preencha o arquivo com um conteúdo parecido com este (os valores de exemplo abaixo você ajusta pra sua aplicação real):
[Unit]
Description=Minha Aplicação
After=network.target
[Service]
ExecStart=/caminho/para/seu/comando
WorkingDirectory=/caminho/da/aplicacao
Restart=always
User=seu_usuario
[Install]
WantedBy=multi-user.target
O segredo aqui é oRestart=always— é ele que garante que, se a aplicação cair por qualquer motivo, o systemd sobe ela de novo automaticamente. - Avise o systemd sobre o novo serviço:
systemctl daemon-reload - Habilite o serviço para iniciar sozinho quando o servidor ligar:
systemctl enable minha-aplicacao - Inicie o serviço agora:
systemctl start minha-aplicacao - Confira se está tudo certo:
systemctl status minha-aplicacao
Comandos úteis no dia a dia com systemd:
systemctl restart minha-aplicacao— reinicia o serviço.systemctl stop minha-aplicacao— para o serviço.journalctl -u minha-aplicacao -f— acompanha os logs da aplicação em tempo real.
PM2 ou systemd — qual eu escolho?
- PM2: mais simples de configurar, comandos amigáveis, ótimo se sua aplicação é Node.js e você quer algo rápido de colocar no ar.
- systemd: mais "de sistema", funciona com qualquer linguagem, é o que já roda por trás de muitos serviços do próprio servidor — vale a pena se você já tem alguma familiaridade com administração Linux ou quer um padrão mais robusto.
Não existe errado aqui — os dois cumprem muito bem o papel de manter sua aplicação de pé. O importante é escolher um e configurar direitinho, seguindo os passos acima com calma.
Dica da Sensei: depois de configurar (seja PM2 ou systemd), sempre teste reiniciando o servidor (ou simulando uma queda da aplicação) pra confirmar que ela realmente volta sozinha. Não deixe pra descobrir que algo não ficou certo só quando o servidor cair de verdade.
Precisa de uma mãozinha?
Se você tentou os passos acima e travou em algum ponto, ou não tem certeza se o seu tipo de plano na GeHost comporta esse tipo de configuração, é só chamar a gente no painel.gehost.com.br — lembrando que todo serviço entregue já vem com suporte gratuito por 30 dias após a entrega. A gente fica feliz em ajudar! 💙