Servidor & DevOps 35 visualizações

Como manter uma aplicação rodando em segundo plano com PM2 ou systemd

Ver no WHMCS

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.

  1. Instale o PM2 globalmente (geralmente via gerenciador de pacotes do Node, como o npm):
    npm install -g pm2
  2. 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.
  3. 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.
  4. 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.
  5. 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.

  1. 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.
  2. 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 é o Restart=always — é ele que garante que, se a aplicação cair por qualquer motivo, o systemd sobe ela de novo automaticamente.
  3. Avise o systemd sobre o novo serviço:
    systemctl daemon-reload
  4. Habilite o serviço para iniciar sozinho quando o servidor ligar:
    systemctl enable minha-aplicacao
  5. Inicie o serviço agora:
    systemctl start minha-aplicacao
  6. 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! 💙

Precisa de Ajuda?

Nossa equipe está pronta para resolver suas dúvidas.