[solved] Lifeguard (host error)

  • wenn ich in der lifeguard.cfg zur Überprüfung eines Hostes folgende Zeile eingebe:
    "host Thinkpad"


    führe ich anschließend das Lifeguard Shellscript aus und sehe folgendes Problem.


    Host ist online:
    pattern: Thinkpad
    ABORT_MESSAGE="host Thinkpad active"
    --> soweit OK


    Host ist offline:
    ping: unknown host Thinkpad
    lifeguard.sh: 45: [: -gt: unexpected operator
    --> Fehler!


    an was kann das liegen?

  • IIRC ist da nen Syntaxfehler im Shellscript.


    Poste das doch einfach mal dann kann man mal schauen.


    cu

  • Schau doch mal nach, was da in der Variablen steht, die in der Zeile geprüft wird, wenn der Host nicht erreichbar ist.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • ich verwende das lifeguard script aus der 0.4 repository


    Auszug:
    <
    [ ${PATTERN:="."} ]
    TEMP=`mktemp`
    ping -c 1 -q $PATTERN > ${TEMP}
    if [ $(grep -c "unknown host" $TEMP) -eq 0 ] && [ $(grep -e "transmitted.*received" $TEMP | cut -d "," -f 2 | cut -d " " -f 2) -gt 0 ]; then
    REASON=${DESCRIPTION:-"host $PATTERN active"}
    rm -f $TEMP
    break
    fi
    rm -f $TEMP
    continue
    ;;
    >


    der ping gibt separat in der console ausgeführt folgenden fehler zurück
    ping: unknown host Thinkpad

  • Dann verwende doch die IP statt dem wohl nicht lokal bekannten Hostnamen

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • aber ich habe keine festen ip`s im netzwerk.


    das macht doch keinen sinn, wenn der host offline ist, was ich ja erkennen will, ist dieser eben nicht anzupingen. ob ip oder hostnamen.
    nur fängt das das script nicht ab sondern stirbt.

  • Das Problem scheint zu sein das das "unknown host" auf stderr ausgegeben wird aber das grepen auf stdout greift.


    Ich würde erst mal probieren daraus
    ---
    ping -c 1 -q $PATTERN > "$TEMP"
    ---
    folgendes zu machen
    ---
    ping -c 1 -q $PATTERN > "$TEMP" 2>&1
    ---


    Ferner müsste man vermutlich das if aufteilen so das der zweite Teil nur greift wenn der erste passt.


    cu

  • Das Script hat leider keine richtige Heimat, das lebt hier in nem Thread im Forum.


    BTW: Ich habe es maf (den Author) mal per PM mitgeteilt, der lifeguard Thread ist leider gesperrt.


    cu

  • timbo2k Danke für die Fehlermeldung
    @cu Danke für die Benachrichtigung und Deine Lösungs des Problems


    Ich bin nicht ganz sicher, welche Version meines Skriptes in yavdr im Einsatz ist. Bei mir sieht die fragliche Passage (mittlerweile) ein bisschen anders aus. Aber von timbo2k entdeckte Fehler ist zum Glück auf bei mir noch drin :)


    Ich habe bei mir die Zeile in

    Code
    ping -c 1 -q $PATTERN >& $TEMP


    geändert.


    Die von cu vorgeschlagene Aufteilung des if existiert doch eigentlich schon, oder? Jedenfalls als

    Code
    if [...] && [...]; then


    Aber vielleicht ist etwas anderes gemeint? Oder ich übersehe einfach mal wieder das Offensichtliche.


    Ich werde auf jeden Fall den o.g. Patch in eine neue Version einbauen.


    Schönen Gruß,
    maf


  • Die von cu vorgeschlagene Aufteilung des if existiert doch eigentlich schon, oder? Jedenfalls als

    Code
    if [...] && [...]; then


    Aber vielleicht ist etwas anderes gemeint? Oder ich übersehe einfach mal wieder das Offensichtliche.


    Ich hatte spontan vermutet das der zweite Teil fehlschlägt wenn der erste nicht zutrifft. Aber wenn die Shell die zweite Bedingung gar nicht erst prüft wenn die erste schon nicht zutrifft dann passt das wohl. Das war nur so eine schnelle Vermutung, also nicht zu wichtig nehmen ;)


    BTW: Magst du deine aktuelle Scriptversion mal hier hochladen? Nur damit ich auf dem aktuellen Stand bleibe.


    cu


    PS: http://de.wikipedia.org/wiki/Liste_von_Abkürzungen_(Netzjargon)#C ;) Der Nick ist "Keine_Ahnung" und "cu" ist die Abschiedsfloskel, nicht wichtig, aber weils hin und wieder mal missverstanden wird...

  • Der Nick ist "Keine_Ahnung" und "cu" ist die Abschiedsfloskel, nicht wichtig, aber weils hin und wieder mal missverstanden wird...

    Entschuldige. Keine Ahnung, wie mir das passieren konnte :-). Vermutlich habe ich im Eifer des Gefechts nur auf das Ende der Nachricht geschaut...


    Zu meiner Überraschung habe ich festgestellt, dass die fehlerhafte Passage in keiner meiner eigenen Versionen enthalten ist. Die Option "host" habe ich in Version 0.0.3 hinzugefügt, aber schon damals mit ">&". Kannst Du feststellen, wo Deine Version herkommt, timbo2k?


    Anbei meine Version 0.0.5. Eine wichtige Änderung in dieser Version ist, dass das Shutdown-Skript von S91.lifeguard nach S30.lifeguard umbenannt ist. Bei der Installation wird versucht zu erkennen, ob der Benutzer sein lokales Skript geändert hat, um es nicht einfach zu überschreiben. Das habe ich zwar bei mir recht ausführtlich getestet, aber ich rate trotzdem dazu, ein eigenes Skript vorübergehend zu sichern. Ich wäre dankbar, wenn ihr mir über eure Erfahrungen bei der Installation berichten könntet.


    Gruß, maf

  • Ich hatte in meiner Version (d.h. die die bei mir installiert ist) diese Zeile (bei "usr)") gelöscht
    ---
    [ ${PATTERN:=".*"} ]
    ---
    IIRC (schon ne Weile her wo ich das debuggt hatte) war das Problem das hier .* durch die Dateinamen des aktuellen Verzeichnisses ersetzt wurde. Evtl. ne Sache der verwendeten Shell? Debian hat dash als /bin/sh und nicht bash.


    BTW: Ich vermute die Version die du suchst kommt dort her? [ANNOUNCE] vdr-addon-lifeguard
    Das war auch die die ich damals als die aktuellste betrachtete (hatte wohl irgendwie nicht gerafft das es nicht die "offizielle" Version ist). Deswegen hat auch die Version die ich hier liegen habe die ssh Bedingung und deine (offizielle) nicht.


    cu

  • ich habe die Version ganz normal über die 0.4er installation oder über apt-get upgrade bekommen. Hatte dort bis jetzt nie was angepasst.


    mein plan ist es das lifeguard script auf einem Linux NAS von Synology zu integrieren.
    wie kann ich dein script von hand installieren/integrieren?


    auf was muss ich beim Shutdown-Skript S30.lifeguard beachten.
    und wodurch wird die wiederholte prüfung ausgelöst, ob der rechner herunter gefahren wird. wird das von vdr selbst erledigt und dein script bricht über das s30 Script den shutdown ab?

  • Das Skript S30.lifeguard ist ein VDR Shutdown Hook. Mit diesem Mechanismus können im Debian VDR Skripte ausgeführt werden, bevor vdr herunterführt. In Abhängigkeit vom Rückgabewert der einzelne Skripte wird das Herunterfahren ggf. abgebrochen. Die Details findest Du in /usr/share/doc/vdr/README.Debian.gz


    Mir ist nicht bekannt, ob dieser oder ein ähnlicher Mechanismus auch in anderen Distributionen zur Verfügung steht.

  • Mir ist nicht bekannt, ob dieser oder ein ähnlicher Mechanismus auch in anderen Distributionen zur Verfügung steht.


    Man kann das Wrapper Script (was die Shutdownhooks aufruft) aber auch bei jeder beliebigen anderen Distribution nutzen. Muss man halt ein wenig anpassen.


    cu

Jetzt mitmachen!

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