executa um script python em background e o reinicia no crash

4

Eu tenho um script Python muito simples que gostaria de estar sempre rodando no meu servidor Ubuntu 12.04. Eu pensei em usar upstart + monit. O problema é que essas ferramentas parecem bastante complicadas para um mortal simples como eu, e não consigo encontrar um exemplo simples na Web.

O exagero é + overstill? / Alguém conhece uma alternativa mais simples? / ou um bom tutorial?

    
por sebpiq 14.08.2012 / 16:19

2 respostas

9

Extraído de esta resposta :

Você pode escrever um script bash monitor.sh , que inicia seu script python e o reinicia se ele falhar, mas não reiniciará se o script sair normalmente:

#!/bin/bash
until myscript.py; do
    echo "'myscript.py' crashed with exit code $?. Restarting..." >&2
    sleep 1
done

Em seguida, basta iniciar o script do monitor em segundo plano:

nohup monitor.sh &

Como uma alternativa para nohup , você também pode considerar o tmux ou tela para executar processos em segundo plano.

    
por 14.08.2012 / 16:42
0

A resposta acima é ótima. Não posso comentar a partir de agora, então talvez melhoremos a resposta aqui.

Você pode até querer escrever uma função para "myscript", pois é um script python e não está sendo executado sob o bash env.

Então,

#!/bin/bash

myscript(){
    python3 myscript [args..]
}

until myscript; do
    echo "'myscript' crashed with exit code $?. Restarting..." >&2
    sleep 1
done

Novas pessoas para python ou bash não sabem disso. Pode ajudá-los. Eu costumava lutar com coisas tão pequenas no começo. Não quero que nenhum outro!

    
por 22.06.2017 / 12:20