J'ai un service nommé "routeur" capable de recevoir des requêtes http.
J'ai décidé d'écrire un script sh qui vérifie périodiquement la santé du service du routeur.
si quelque chose ne va pas, il le redémarre.
Le problème:
si le routeur a été démarré avec ce script, si ce script est arrêté, le service de routeur est également terminé.
Ce qui est étrange, c’est que ce simple script sh d’une ligne qui effectue simplement le "redémarrage du routeur de service" fonctionne correctement (il redémarre le service et se ferme immédiatement et tout va bien)
Je suppose que la raison est quelque part en boucle ou une bash si les choses.
code de script attaché ...
Merci pour l'aide!
#!/bin/bash
while :
do
STATUS=$(curl --silent localhost:80/test)
if [ "$STATUS" != "OK" ]
then
echo "problems: $STATUS".
service router restart
fi
sleep 5
done
continue
aprèsservice router restart
pour voir si cela fonctionne alors pour essayer d'isoler le problème.service
devrait déboucher sur la gestion du processus et revenir une fois le service redémarré, donc je ne peux que penser que vous avez écrit le/etc/init.d/router
script dans le mauvais sens. Postez également ce script pour que quiconque puisse vous aider.Réponses:
Voici le processus d’exécution du script bash:
Tous les programmes que vous exécutez dans le script ont cet enfant bash comme terminal de contrôle.
Donc, maintenant, si l'enfant bash termine tous les programmes se terminent normalement.
Puisque l'enfant bash ne revient pas tant que le script n'est pas terminé, vous ne pouvez pas travailler sur le parent bash.
Vous devrez donc peut-être exécuter l'enfant bash (c'est-à-dire le script) en arrière-plan. Cette
vous permet de continuer votre travail. Background Bash ne se termine pas (sauf si vous dites ou il y a une faute).
la source