Question exécuter un script python en arrière-plan et le redémarrer lors d'un crash


J'ai un script Python très simple que je voudrais toujours utiliser sur mon serveur Ubuntu 12.04. J'ai pensé utiliser monstart + monit. Le problème est que ces outils semblent plutôt compliqués pour un simple mortel comme moi, et je ne trouve pas un exemple simple sur le web.

Est-ce que upstart + monit overkill? / Quelqu'un connaît-il une alternative plus simple? / ou un bon tutoriel?


4
2017-08-14 14:19


origine


Comme je veux juste que le script soit lancé, n'est-ce pas suffisant? Monit est nécessaire seulement pour faire un test périodiquement correctement! - sebpiq


Réponses:


Pris à partir de cette réponse:

Vous pourriez écrire un script bash monitor.sh qui démarre votre script python et le redémarre s'il se bloque mais ne redémarre pas si le script se ferme normalement:

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

Ensuite, lancez le script de contrôle en arrière-plan:

nohup monitor.sh &

Au lieu de nohup, vous pouvez également envisager tmux ou écran pour exécuter des processus d'arrière-plan.


9
2017-08-14 14:42



Fonctionne comme un charme et si facile! Merci :) - sebpiq


La réponse ci-dessus est géniale. Je ne peux pas commenter dès maintenant alors peut-être améliorer la réponse ici.

Vous pourriez même vouloir écrire une fonction pour "myscript" car c'est un script python et ne pas s'exécuter sous le bash env.

Alors,

#!/bin/bash

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

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

Les nouveaux utilisateurs de python ou de bash ne connaîtront pas cette petite chose. Pourrait les aider. J'avais l'habitude de me battre avec de si petites choses au début. Ne veux pas que les autres!


0
2018-06-22 10:20



Complètement inutile si le script python a le bon case. Et ce shebang indiquera la version correcte de Python. - xenoid
Et si ça ne marche pas? - Neil Agarwal
Je poste parfois des choses sous prétexte de faire comprendre aux débutants si leur travail ne fonctionne pas. Tout le monde n'a pas nécessairement besoin de savoir ce qu'est un shebang. - Neil Agarwal
Et si ça ne marche pas? Ensuite, vous en ajoutez un. - xenoid