eseguire uno script python in background e riavviarlo in caso di arresto anomalo


4

Ho uno script Python molto semplice che mi piacerebbe essere sempre in esecuzione sul mio server Ubuntu 12.04. Ho pensato di usare upstart + monit. Il problema è che quegli strumenti sembrano piuttosto complicati per un semplice mortale come me, e non riesco a trovare un semplice esempio sul web.

È upstart + monit overkill? / Qualcuno conosce un'alternativa più semplice? / o un buon tutorial?


Come voglio che lo script sia in esecuzione, non è abbastanza in voga? Monit è necessario solo per fare un test periodicamente giusto!?
sebpiq

Risposte:


9

Preso da questa risposta :

Potresti scrivere uno script bash monitor.sh che avvia il tuo script python e lo riavvia se si blocca ma non si riavvia se lo script esce normalmente:

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

Quindi avvia lo script del monitor in background:

nohup monitor.sh &

In alternativa a nohup, puoi anche prendere in considerazione tmux o schermo per l'esecuzione di processi in background.


Funziona come un fascino e così facile! Grazie :)
sebpiq

1

La risposta sopra è grande. Non posso commentare fin d'ora quindi forse migliorare la risposta qui.

Potresti anche voler scrivere una funzione per "myscript" dato che si tratta di uno script python e non in esecuzione sotto la bash env.

Così,

#!/bin/bash

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

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

Nuove persone a Python o Bash non saprebbero questa piccola cosa. Potrebbe aiutarli. All'inizio ero un po 'stanco di cose così piccole. Non voglio nessun altro!


Completamente inutile se lo script python ha il corretto faccenda . E questo shebang indicherà la versione corretta di Python.
xenoid

E se non lo fosse?
Neil Agarwal

A volte pubblico cose con il pretesto di far capire ai neofiti se la loro cosa non funziona. Tutti non hanno necessariamente bisogno di sapere cos'è uno shebang.
Neil Agarwal

E se non lo fosse? Quindi ne aggiungi uno.
xenoid
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.