service démarré à partir du script sh s'arrête lorsque script sh

0

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
rshmelev
la source
En relation: (1) , (2) .
gronostaj
C'est étrange. Essayez de mettre un continue après service 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.
Daniel Andersson

Réponses:

1

Voici le processus d’exécution du script bash:

  1. Bash fourche un enfant, qui exécute une autre bash.
  2. Cette bash enfant interprète le script, forçant l'enfant et exécutant des programmes en fonction des besoins.

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).

mohit
la source