Servidor & DevOps 0 visualizações

Como automatizar o restart de um serviço travado com um script de monitoramento no servidor

Ver no WHMCS

Como automatizar o restart de um serviço travado com um script de monitoramento

Oi, tudo bem? Aqui é a Sensei da GeHost 🥋 Hoje vou te ensinar um truque que separa quem sofre com sites fora do ar às 3h da manhã de quem dorme tranquilo: um script de monitoramento que fica de olho no seu serviço e, se ele travar, dá um "empurrãozinho" pra reiniciar sozinho — sem você precisar entrar no painel correndo.

Esse guia é voltado principalmente pra quem tem aplicações Node.js ou Python rodando na hospedagem (aquelas configuradas em "Setup Node.js App" ou "Setup Python App" no cPanel). Sites estáticos ou WordPress raramente "travam" desse jeito — mas se o seu caso for esse, me chama que a gente vê juntos qual é o cenário certo pra você.

Por que um serviço "trava"?

De vez em quando, uma aplicação pode ficar presa: um processo que não responde mais, uma conexão que não fecha, um erro que não derruba o processo mas também não deixa ele funcionar direito. O usuário lá na ponta só vê a página não carregar. A solução mais simples e mais usada no mundo todo é: monitorar e reiniciar automaticamente quando isso acontecer.

O que vamos usar

  • Um script (bash, por exemplo) que testa se o serviço está respondendo.
  • Um Cron Job do cPanel, que roda esse script de tempos em tempos automaticamente.
  • Um "gatilho" de reinício seguro — no caso de apps Node.js/Python via Passenger, isso é feito criando (ou "tocando") o arquivo tmp/restart.txt dentro da pasta da aplicação.
Painel inicial do cPanel com os grupos de ferramentas

Passo a passo

  1. Acesse o Gerenciador de Arquivos no seu cPanel (painel.gehost.com.br) e vá até a pasta da sua aplicação. Gerenciador de Arquivos do cPanel com a árvore de pastas
  2. Crie um arquivo novo, por exemplo monitor.sh, com um conteúdo parecido com este (adapte o caminho e a URL para os seus):
    #!/bin/bash
    URL="https://seudominio.com/"
    APP_DIR="/home/seuusuario/nodejs_apps/meuapp"
    
    RESPOSTA=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL")
    
    if [ "$RESPOSTA" != "200" ]; then
      echo "$(date) - serviço não respondeu (status $RESPOSTA), reiniciando..." >> "$APP_DIR/monitor.log"
      touch "$APP_DIR/tmp/restart.txt"
    else
      echo "$(date) - ok" >> "$APP_DIR/monitor.log"
    fi
  3. Dê permissão de execução ao arquivo (no Gerenciador de Arquivos: clique com o botão direito → Permissões → marque "Execução" para o dono).
  4. Agende o Cron Job: no cPanel, procure por "Cron Jobs" e cadastre um comando que rode o script na frequência que fizer sentido pra sua aplicação (por exemplo, a cada poucos minutos). O campo de comando fica parecido com:
    /bin/bash /home/seuusuario/nodejs_apps/meuapp/monitor.sh
  5. Teste manualmente primeiro. Rode o script uma vez fora do agendamento (ou derrube a aplicação de propósito) e confira se o arquivo monitor.log registrou o que era esperado e se o serviço realmente reiniciou.
  6. Acompanhe o log de vez em quando. Se você perceber que o "restart" está acontecendo com muita frequência, isso é sinal de um problema mais de fundo na aplicação (não só de infraestrutura) — vale a pena revisar o código ou pedir ajuda de quem desenvolveu o sistema.
💡 Dica da Sensei: nunca deixe o intervalo do Cron Job curto demais a ponto de o script "brigar" com o próprio processo de reinício (por exemplo, reiniciar de novo enquanto a aplicação ainda está subindo). Dê um tempo de folga generoso entre uma verificação e outra.
💡 Dica da Sensei: guarde sempre um log (como o monitor.log do exemplo) — ele é seu maior aliado na hora de entender por que o serviço travou, e não só que ele travou.

Quando pedir ajuda

Se a sua aplicação não é Node.js/Python, se você não tem certeza de qual comando usar para reiniciar o seu tipo de serviço, ou se o script está falhando sem motivo aparente, não force a barra sozinho — abra um chamado com a nossa equipe pelo painel.gehost.com.br. A gente te ajuda a ajustar o script certinho para o seu cenário. 🙌

Precisa de Ajuda?

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