J'ai des applications qui doivent fonctionner sur mon ordinateur portable tout le temps.
J'utilise un script bash pour démarrer ces applications. Dans mon script, j'ai une boucle qui ressemble à ceci:
while true;
do
xterm
done
Ceci exécute une application (xterm
dans ce cas) et si l'application se bloque, la boucle la redémarre.
Cela a pour inconvénient qu'il n'y a pas de sortie "propre" de cette boucle. Ainsi, même si l'intention de l'utilisateur est de fermer xterm
, la boucle la redémarre.
Y at-il un moyen pour démarrer une application de script bash, regardez si elle est en cours d'exécution, à réexécuter il si le script s'est écrasé ou ne rien faire si l'utilisateur l'a fermé correctement?
Essaye ça:
while true; do xterm && break; done
Les applications ont codes d'état de sortie de sorte que si quelque chose se passe bien, il renvoie zéro ... Et si quelque chose ne va pas, un autre numéro est jeté. Cela permet aux gens de se connecter et de découvrir le problème exact. C'est ce que fait l'autre réponse.
&&
vérifie simplement que la commande précédente était une sortie à statut zéro et, le cas échéant, rompt la boucle. S'il se bloque, il jettera autre chose que 0 et la clause && ...
ne déclenchera pas; il vous suffira de faire une boucle et d'exécuter xterm
.
Dans la condition while
, vous pouvez tester si l'état de sortie de xterm
a réussi ou non avec quelque chose comme ceci:
result=1
while [ $result -ne 0 ]; do
xterm
result=$?
done
La variable $?
conserve le statut de sortie de la dernière commande exécutée.
Je vais vous suggérer d'utiliser.
jusqu'à xterm; echo "programme terminé avec le statut $?" ; terminé
Cela relancera votre programme s'il est tué.
Essayez d'utiliser superviseur c'est très simple et facile à ajouter un programme ou un script à exécuter . Dans le cas minimal, vous avez besoin de command
et peut-être exitcodes
dans programx-section pour configurer.
exitcodes
est 0,2 par défaut, ce qui signifie:
supervisord relancera le processus s'il se termine avec un code de sortie non défini dans cette liste
En général, vous voulez: relancer si le script plante ou ne rien faire si l'utilisateur l'a fermé correctement (ou si le script s'est terminé avec succès)
essayez d'abord la configuration la plus simple:
[program:you_app_name]
command=/path/to/you/app
Pour plus de flexibilité, voir Fichier de configuration documentation.