Skript wird einfach beendet

chklump

Neuer User
Mitglied seit
26 Apr 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,
ich hab jetzt länger gesucht und gelesen, aber anscheinend hat mein Problem sonst niemand.
Ich möchte ungefähr stündlich eine Aktion ausführen und benutze dazu eine einfache Schleife mit einem sleep-Befehl, in etwa so:

Code:
while true
 do
  # Hier ein paar Befehle
  sleep 3600
 done
Soweit, sogut, der erste Durchlauf funktioniert auch wunderbar, aber nach einer längeren Zeit verschwindet das Skript einfach aus der Prozessliste und hat sich beendet. Woran kann das liegen? Werden zu lange laufende Skripte einfach abgebrochen oder wo ist der Haken?

Gruß chklump
 
Ja, gute Idee, werd ich mal machen. Hab das jetzt mal mit nem Warteintervall von 30 Sekunden ausgeführt, da gibt es keine Probleme, auch nicht beim zweiten, dritten oder fünften Durchlauf, mal sehen, was morgen in der Datei steht.
Grundsätzlich dürfen Skripte aber beliebig lange laufen? Ich hab übrigens die Fritz!Box Fon Wlan 7050 ungemoddet, falls das weiterhilft.
 
Kann es evtl. mit den "paar Befehlen" zusammenhängen?
Was steht denn noch in der Schleife?
 
Komplett sieht das Skript so aus:

Code:
#!/bin/sh


url=http://www.rockabilly08.de/Dateien/tarifupdate.php?zone=

{ while true
 do
  echo 7,3 >/var/led
  tarifneu=false
  cd /var/tmp
# Liste der Zonen hier erweitern und unten neue Zuordnung vornehmen
  for zone in D1 D2 E+ O2; do
    echo Tarifupdate f�r Zone $zone
    if [ -f $zone ]; then
      vorwahl=`cat $zone`
      aktvorwahl=`wget -O - ${url}${zone}`
      if [ ${vorwahl} != ${aktvorwahl} ]; then
        tarifneu="true"
        cat > $zone <<EOL
$aktvorwahl
EOL
        vorwahl=$aktvorwahl
      fi
    else
      tarifneu="true"
      wget -O $zone ${url}${zone}
      vorwahl=`cat $zone`
    fi
# Zuordnung der Zonen zu den Positionen der Vorwahlen
    case $zone in
      D1) EINS=$vorwahl;;
      D2) ZWEI=$vorwahl;;
      E+) DREI=$vorwahl;;
      O2) VIER=$vorwahl;;
    esac
  done

  
  echo 7,2 >/var/led
  
  if [ "${tarifneu}" = "true" ]; then
    echo "einige Tarife haben sich ge„ndert; neue Daten werden geschrieben..."
    export REQUEST_METHOD="POST"
    export REMOTE_ADDR="127.0.0.1"
    export CONTENT_TYPE="application/x-www-form-urlencoded"
    
POST_DATA="login:command/password=test
&telcfg:settings/Routing/Provider1=$EINS
&telcfg:settings/Routing/Provider2=$ZWEI
&telcfg:settings/Routing/Provider3=$DREI
&telcfg:settings/Routing/Provider4=$VIER
&telcfg:settings/Routing/Provider5=$FUNF
&telcfg:settings/Routing/Provider6=$SECHS
&telcfg:settings/Routing/Provider7=$SIEBEN
&telcfg:settings/Routing/Provider8=$ACHT
&telcfg:settings/Routing/Provider9=$NEUN
"
    export CONTENT_LENGTH=${#POST_DATA}
    
    echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
    echo "fertig."
  else
    echo "Tarifdaten waren schon auf dem aktuellen Stand."
  fi
  
  echo "st�ndliches Tarifupdate durchgef�hrt. Lege mich eine Stunden schlafen..."
  echo 7,3 >/var/led
  sleep 3600
done } > /var/tmp/lcrlog &

Hab jetzt die Ausgaben mal mitschreiben lassen: Das Skript hängt sich einfach kommentarlos weg, kein "terminated" oder so. Und jetzt komm ich noch nichtmal mehr per telnet auf die Box, obwohl ich den telnetd per Telefon aus und wieder eingeschaltet hab und jedesmal einen positiven Quittungston gekriegt hab... mysteriös.
 
Mhh, so, fehler gefunden. Es lag anscheinend an dem echo 7,3 >/var/led, der die Info-LED zum blinken bringt. Warum der nicht immer funktioniert weiß ich zwar immer noch nicht, aber ohne diese Befehle funktionierts zumindest.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.