Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Shell: Steuerung einer Endlosschleife

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.08.2006
    Beiträge
    25

    Shell: Steuerung einer Endlosschleife

    Hallo zusammen!

    Habe ein kleines problem. Habe jetzt ein wenig mit Shell angefangen und komm jetzt leider nicht weiter. Es geht um folgendes:

    Ich möchte gerne einen Prozess immer neustarten lassen wenn dieser nicht mehr läuft. Zugleich möchte ich diesen Prozess auch starten/stoppen/neustarten können. Und hier ist das Problem ich weiß einfach nicht wie ich das am besten mache. Eine Endlosschleife die immer den prozess neustartet wenn er abgestürzt ist habe ich bereits hinbekommen - auch diese Start/neustart/stop Funktion aber bekomme es einfach nicht verbunden.

    Kann mir jemand helfen? Wie muss ich an die ganze sache ran gehen?

    liebe grüße
    nachtengel

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    so ganz komme ich nicht mit, was Du willst. Möchtest Du innerhalb der Endlos-Schleife abhängig von einer bestimmten Bedingung den Prozess entweder stoppen, starten oder nach Abschuss neu starten können? Willst Du diese Bedingung (Start/Stop/Restart) von aussen setzen können?

    Wenn ich mit der Vermutung recht habe, dann ginge es z. B. mit einer Steuerdatei:
    Code:
    function starte_prozess() {
      ...
    }
    function stoppe_prozess() {
      ...
    }
    function restarte_prozess() {
      ...
    }
     
    while true; do
      case "`cat steuerdatei 2>/dev/null`" in
        "start") starte_prozess;;
        "stop") stoppe_prozess;;
        "restart") restarte_prozess;;
      esac
      sleep 10
    done
    Dann kannst Du per "echo start >steuerdatei" usw. die Abarbeitung innerhalb des case-Switch steuern.

    Jan

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.08.2006
    Beiträge
    25
    Danke erstmal für deine Antwort das sieht schon sehr gut aus!

    Ich versuchs nochmal kurz und knapp zu beschreiben:

    Ich möchte gerne einen Server ("Serverprozess" => GameServer) der abstürzt wieder automatisch neustarten lassen. Dieses Script möchte ich gerne aber auch mit "Start/Stopp/Restart" verwalten können (./script start/stopp/restart), sodas ich auch wenn der Server aus ist ihn über ./script start - starten kann bzw. wenn er läuft über ./script restart - neustarten kann + möchte die Endlosschleife stoppen können d.h. ich brauche noch einen Parameter für "Stopp" der das Restarten bzw. das script beendet.

    Mein Server Startbefehl sieht dann so aus: screen -d -m -S $SVRCNAME $DIR/$SCRIPT $COMMAND

    Wie würde das ganze dann bei deinem Beispiel aussehen?

    Danke für die Hilfe!
    Geändert von nachtengel06 (20-11-2007 um 12:01 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    das sieht schon ein wenig anders aus. Da bietet sich folgendes Gerüst an, das auch auf Steuerdateien verzichten kann. Du bastelst das Script sozusagen mit Varianten (wobei die "start"-Variante eigentlich nicht nötig ist, das Script kann ja nach dem Start gleich überwachen):
    Code:
    #! /bin/bash
    
    # wenn Parameter fehlt: gepflegte Fehlermeldung + unwirsches Ende
    if test -z "$1"; then
      echo "usage: $0 start|stop|restart" >&2
      exit 1
    fi
    
    # mal gucken, ob Serverprozess rennt
    is_running="`ps -ef | grep Serverprozess | grep -v grep`"
    
    # abh. von den Parametern weiter
    case "$1" in
      start)
        # ist verstorben: Starten
        test -z "$is_running" && /Pfad/zum/Serverprozess
        ;;
      stop)
        # zappelt noch: Killen
        test -n "$is_running" && killall Serverprozess
        # ggf. Script-Instanz in restart-Schleife ebenfalls killen
        killall `basename $0`
        ;;
      restart)
        # aller 10 Sekunden gucken, ggf. Neustarten
        while true; do
          test -z "$is_running" && /Pfad/zum/Serverprozess
          sleep 10
          is_running="`ps -ef | grep Serverprozess | grep -v grep`"
        done
        ;;
      *)
        # falscher Parameter: meckern und raus
        echo "usage: $0 start|stop|restart" >&2
         exit 1
        ;;
    esac
    
    exit 0
    Vorsicht: ungetestet und nur als prinzipieller Bauplan zu verstehen (Errorhandling, Serverprozess evtl. im Hintergrund starten, wenn er das nicht selbst tut, usw.).

    Jan

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •