Shutdown in Abhängigkeit von ping

  • Hi,


    ich komme hier leider nicht weiter. Habe zwar per Suche dies und das gefunden,
    aber mein shutdown-Verhinderer will den vdr nie herunterfahren lassen.


    In Anlehnung an das "noad shutdown hook script" von Tobias habe ich mir
    folgendes Script erstellt:


    /usr/share/vdr/shutdown-hooks/S54.ping


    Code
    sudo -u vdr /bin/ping -c 1 192.168.0.21 | grep -q '100% packet loss'
    if [ $? -ne 0  ] ; then
      echo "TRY_AGAIN=30"
    fi
    exit 0


    Ein einzelner Rechner soll bei "Existenz" den Shutdown verhindern und ein
    neuer Versuch soll in einer halben Stunde erfolgen.


    Liegt das an der Rüchmeldung von ping, dass das nicht will?


    Grüße
    tivi2

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

    Einmal editiert, zuletzt von tivi2 ()

  • Hi,


    ohne das Originalscript zu kennen...


    Ich vermute mal, dass das "echo" da nur als Test drinsteht, oder?


    Ansonsten ist klar, warum es nicht geht: Du setzt TRY_AGAIN auf 30, sobald dein Rechner da ist - ich denke mal, dass das beim Basteln immer der Fall ist. Sobald der Rechner weg ist, wird nichts gemacht, also insbesondere TRY_AGAIN nicht neu gesetzt, bleibt also bei 30.


    Du musst entweder "negative Logik" benutzen (also gleich statt ungleich und dann die entsprechende Aktion) oder vor dem ping-Aufruf TRY_AGAIN explizit auf irgendwas anderes setzen.


    Viele Gruesse,


    Jan

    Hardware: ASRock AM2NF3-VSTA + AMD Sempron 3200+ (1,8 GHz, meist 1,0 GHz) mit Fujitsu Siemens DVB-C FF (ohne Kabelsignal), 2 x TechniSat AirStar 2 DVB-T PCI und Terratec Cinergy T2 DVB-T USB 2.0 (als IR-Empfaenger ohne Antenne), Pollin 27x4 LCD, 1 GB DDR2, diskless, /video ueber NFS
    Software: Gentoo Linux 64 Bit (Kernel 2.6.24) mit VDR 1.4.7 aus den ebuilds mit einigen manuellen Anpassungen und wenigen Plugins (femon, dvd, remote, lcdproc)

    Einmal editiert, zuletzt von JanR ()

  • Hi Jan,


    Danke für Deine Hilferstellung. Hier das Originalscript:



    Grüße

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

  • Hi,


    dann vergiss meinen Kommentar... scheinbar liest der VDR das, was das Script nach stdout schreibt... dann ist das echo komplett richtig.


    Sudo ist in der Tat unnoetig, kann es sein, dass das ein Passwort abfragen will? Versuchs doch mal ohne.


    Viele Gruesse,


    Jan

    Hardware: ASRock AM2NF3-VSTA + AMD Sempron 3200+ (1,8 GHz, meist 1,0 GHz) mit Fujitsu Siemens DVB-C FF (ohne Kabelsignal), 2 x TechniSat AirStar 2 DVB-T PCI und Terratec Cinergy T2 DVB-T USB 2.0 (als IR-Empfaenger ohne Antenne), Pollin 27x4 LCD, 1 GB DDR2, diskless, /video ueber NFS
    Software: Gentoo Linux 64 Bit (Kernel 2.6.24) mit VDR 1.4.7 aus den ebuilds mit einigen manuellen Anpassungen und wenigen Plugins (femon, dvd, remote, lcdproc)

  • Hi,


    habe jetzt nach euren Hinweisen sudo und grep weggelassen.


    Eigenartig ist jetzt, dass sich IMMER mein Samba-Script meldet.
    Bevor ich das neue Script hinzufügte, lief das einwandfrei.


    Nach einem Shutdown werden jetzt also diese Scripte ausgeführt:


    Code
    /usr/share/vdr/shutdown-hooks/S50.noad as shell script
    /usr/share/vdr/shutdown-hooks/S54.ping as shell script
    /usr/share/vdr/shutdown-hooks/S55.samba as shell script


    S55.samba sieht so aus (habe ich hier aus dem Forum):


    Code
    sudo -u vdr smbstatus -L | grep -q 'No locked files'
    if [ $? -ne 0  ] ; then
      echo "TRY_AGAIN=30"
    fi
    exit 0


    Wie gesagt, jetzt plötzlich blockiert dieses Script den shutdown.


    Habt ihr noch eine Idee?


    cu
    tivi2

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

    Einmal editiert, zuletzt von tivi2 ()

  • Ich habe mein ping-Script modifiziert, denn die Logik war falsch.
    Wie FireFly anmerkte, gibt ping bei Erfolg eine "0" zurück.
    Deshalb musste ein "equal" hin. Sieht jetzt so aus:



    S54.ping


    Code
    /bin/ping -c 1 192.168.0.21
    if [ $? -eq 0  ] ; then
      echo "TRY_AGAIN=30"
    fi
    exit 0


    Leider will es aber nicht den Shutdown verhindern...



    Zudem passiert es, dass bei zusätzlicher Nutzung meines alten Samba-Scripts,
    wie bereits erwähnt dieses nun immer das Herunterfahren blockiert.


    Werfe ich das Ping-Script raus, läuft alles erst wieder wie gehabt, wenn
    ich einmal einen Shutdown zusätzlich ohne Samba-Script initiiere.
    Erst nach einem erneuten Hochfahren kann das Samba-Script wieder rein...



    S55.samba


    Code
    sudo -u vdr smbstatus -L | grep -q 'No locked files'
    if [ $? -ne 0  ] ; then
      echo "TRY_AGAIN=30"
    fi
    exit 0


    $? wird doch bei jedem Script immer entsprechend aktualisiert, oder?
    Ich bin ratlos...


    Grüße
    tivi2

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

    Einmal editiert, zuletzt von tivi2 ()

  • Hmm...


    beim Ping-Script ist es doch der RC von ping selbst, oder?
    Wenn wir das gesondert betrachten, hast Du eine Idee, warum das nicht will?

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

  • Glücklicherweise muss ich kein Samba benutzen :D
    Das $? enthält immer den Returncode des letzten ausgeführten Befehls.


    Ad hoc könnte ich mir aber folgendes vorstellen: (ungetestet)

    Code
    FILES=$(smbstatus -L | grep -c 'No locked files')
    if [ $FILES -ne 1  ] ; then
      echo "TRY_AGAIN=30"
    fi
    exit 0


    Damit gibt grep die Anzahl der Strings "No locked files" zurück. Ist der String nicht vorhanden, d.h. die Ausgabe ungleich 1 wird das TRY_AGAIN=30 ausgegeben.
    Ansonsten hat die Bash die nette Option mit bash -x <skriptname> jede ausgeführte Zeile auszugeben, umleiten in eine Datei mit "... >logfile.txt 2>&1".
    Außerdem sollte am Anfang jeden Skripts der Interpreter stehen, nämlich

    Bash
    #!/bin/bash

    damit das nicht mit ksh, csh oder gar CMD.exe ausgeführt wird (ok, geht nicht, ich weiß, sollte nur als abschreckendes Beispiel dienen ;D)

  • Danke FireFly,


    habe Dein Script mal übernommen. Ergebnis immer:
    "/usr/share/vdr/shutdown-hooks/S55.samba requests to try again in 30 minutes"


    Habe mal das Ganze wie von Dir empfohlen in eine Logdatei geleitet:


    'No locked files' vorhanden


    Code
    ++ smbstatus -L
    ++ grep -c 'No locked files'
    + FILES=1
    + '[' 1 -ne 1 ']'
    + exit 0


    'No locked files' nicht vorhanden


    Code
    ++ smbstatus -L
    ++ grep -c 'No locked files'
    + FILES=0
    + '[' 0 -ne 1 ']'
    + echo TRY_AGAIN=30
    TRY_AGAIN=30
    + exit 0


    Grüße
    tivi2

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

  • Hallo tivi2,


    Zitat

    Original von tivi2

    Code
    /bin/ping -c 1 192.168.0.21
    if [ $? -eq 0  ] ; then
      echo "TRY_AGAIN=30"
    fi
    exit 0


    Da das aufrufende Script die Ausgabe auswertet, so mußt die diese von dem Ping verhindern.


    Code
    ping -c 1 192.168.0.21 2>&1 >/dev/null
    ...


    Hardy

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

  • Zitat

    Original von tivi2
    Ergebnis immer:
    "/usr/share/vdr/shutdown-hooks/S55.samba requests to try again in 30 minutes"


    Ok, so wird das nix. Das Skript macht jetzt wohl was es soll, aber es geht trotzdem noch nicht. Wie sieht denn das aufrufendeSkript aus? Wie wertet es die Ausgaben aus? Oder gibts noch andere Beispiele? Oder gar Lösungen hier im Forum?

  • Hardy, Danke! Das ist die Lösung für das ping-Script.
    Das läuft jetzt schon mal... Super!!!


    Zitat

    Original von HFlor
    ...


    Code
    ping -c 1 192.168.0.21 2>&1 >/dev/null
    ...

    ...



    Hey FireFly, Danke für Deine Ausdauer! Hier mal eine Liste.



    Aufgerufen wird /usr/lib/vdr/vdr-shutdown.wrapper.
    Nachfolgend mal das Script vdr-shutdown:



    cu
    tivi2

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

  • Hmm... In der alten Version des Scripts geht es mit "2>&1 >/dev/null" leider
    auch nicht, obwol der RC stimmt - keine Ahnung was da los ist...


    Wo müsste der Zusatz "2>&1 >/dev/null" in Dein vorgeschlagenes Script rein?

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

  • ">/dev/null 2>&1" dient doch dazu, die Ausgaben vom Ping zu unterdrücken (und bitte nicht andersrum schreiben, sonst funktioniert's nicht). Das grep filtert ja schon stdout (=1), das stderr (=2) könnte man mit "FILES=$(smbstatus -L 2>/dev/null | grep -c 'No locked files')" auch unterdrücken. Ich kann mir aber nicht vorstellen, dass es daran liegt denn das Skript an sich funktioniert ja ...

  • Deine Vermutung hat sich bestätigt. Auch jetzt gibt es den richtigen RC.
    Dennoch wird immer ein 'TRY_AGAIN=30' ausgeworfen.


    Kann man wohl nichts machen. Schade.


    Vielen Dank.



    tivi2

    c't VDR v4.5 unfree / Kernel: 2.6.16-ct-1 / 1.4.7-2ctvdr3 (Tobi/TomG)
    Asus K8V-X / Athlon64 3000+ / FU-Si DVB-C FF + 3x Terratec Cinergy 1200 DVB-C


    Neuinstallation in Arbeit:
    c't VDR v7.0 unfree / Kernel: 2.6.28-etobi.3-486 / 1.7.8-1devel1 (Tobi/TomG)


    Ubuntu Server in Arbeit:
    GA-MA785GMT-UD2H / Athlon II X4 605e / 3x HD154UI 1,5TB Raid5
    Linux Server 2.6.31-14-server x86_64

  • Hallo tivi2,


    evtl. hilft Dir ein Schnipsel aus dem Hook, den ich verwende:

    Außerdem habe ich es komplett angehängt, falls Du mehr Infos brauchst.


    Viele Grüße,
    Chriss

    Dateien

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!