Monitorar o processo e reiniciar quando não estiver em execução usando o crontab

0

Eu tenho uma combinação de servidores Python / JS que preciso manter em execução o tempo todo. O servidor Python tem uma tendência a travar, já que está sendo executado em um servidor com 1 GB de RAM.

Eu escrevi um script chamado "monitor.sh" que está definido no crontab para ser executado a cada minuto, mas parece falhar sempre que ele tenta reiniciar o servidor python.

Eu sei que está sendo executado , posso verificar se está sendo executado pelo timestamp que sai toda vez que é executado.

monitor.sh

#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/www/site.com

echo "CHECKING" >> /var/www/site.com/monitor.log

pidof python3 >/dev/null
if [ $? -ne 0 ] ; then
  echo "Restarting Python App:  $(date)" >> /var/www/site.com/monitor.log
  screen -dmS python_server python3 /var/www/site.com/app.py
fi

pidof nodejs >/dev/null
if [ $? -ne 0 ] ; then
  echo "Restarting Inferno Server:  $(date)" >> /var/www/site.com/monitor.log
  screen -dmS inferno_server nodejs /var/www/site.com/render_server.js
fi

crontab - ( crontab -e sob o usuário típico)

* * * * * /var/www/site.com/monitor.sh

Verei "Restarting Python App" nos logs e nada acontecerá. A tentativa de registrar a saída com > out.txt 2> errors.txt não produz nada.

Coisas que ainda não funcionaram:

  • Usando o crontab no nível do sistema
  • Executando o servidor com sudo
  • Usando chmod +x em todos os arquivos
  • Usando chmod -R 755 em todos os arquivos
  • Chamando /usr/bin/python3 diretamente
  • Usando os.chdir() no script python

Coisas que funcionam:

  • A executar a aplicação manualmente
  • Executando o script manualmente
  • Executando o script com qualquer outro arquivo do Python
  • Monitorando e chamando novamente o outro servidor JS conforme necessário

O servidor é uma instância de bottle.py usando o Gunicorn, se isso ajudar.

Existe alguma maneira de descobrir o que está realmente acontecendo aqui? Um arquivo de log que eu posso verificar, ou uma maneira de realmente obter erros deste comando?

    
por Noi Sek 28.11.2016 / 22:22

2 respostas

0

Eu sei que não é isso que você está perguntando, mas sua abordagem parece muito complicada. Eu não tenho certeza se a tela deve funcionar em um script e eu não tenho meu pc comigo agora para testá-lo

O que eu sugiro strongmente é que você use o supervisord para monitorar e reiniciar os serviços.

    
por 28.11.2016 / 22:43
0

Eu sugeriria usar o Upstart ou o Systemd. Dependendo da idade da sua distribuição, o Ubuntu / Debian / CentOS os pré-instalaria. Sistemas muito mais antigos teriam o System V.

    
por 28.11.2016 / 22:59