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?