Remote prüfen ob VDR läuft ?

  • hi
    ich möchte Remote von einem VDR-Client aus prüfen, ob der VDR Server schon läuft.
    Ob er online ist würde ich ja mit nem PING hinbekommen, wie kann ich aber checken ob die vdr-soft betriebsbereit und hochgefahren ist?
    Unter win würde ich das mit einem
    telnet vdr.lan 2001
    machen, wie geht das über ein script per shell?


    Hintergrund: möchte vor dem Starten des vdr-clients prüfen ob der Server oben ist sodass ich keine VDR-Client Absturz provoziere.
    tobias

    :vdr1 VDR User #626:fans
    VDR II: YeongYang A106, Fusi D1522, Celeron 2GHz, Frontend per DVB-s FF, 2xDVB-c, ATRIC-IR, YaVDR 0.3a
    VDR III HDTV: Inter-Tech 2008V mit iMonLCD, Atric, ASRock Extreme3 770 AM3, AMD Sempron 140 1x 2.70GHz AM3, 1,5TB WD15EADS, 2TB WD20EARS, 2x4GB DDR3-1600, NVidia GT520 passiv, 3x DVB-c, YaVDR 0.5 @ Samsung PS-50B550

  • hab gerade keinen vdr zur hand, aber vielleicht so:


    wenn ja:

    Code
    bitbox:~# echo "Quit" | netcat localhost 21
    220 ProFTPD 1.2.5rc1 Server (Bitbox FTP-Server) [bitbox.hertz.wg]
    221 Goodbye.


    wenn nein:

    Code
    bitbox:~# echo "Quit" | netcat localhost 23
    localhost [127.0.0.1] 23 (telnet) : Connection refused


    mfg
    -zuse-

  • Servus,


    ich empfehle da, den SVDRP-Port 2001 zu kontakten (muss dem Client aber erlaubt sein, siehe svdrphosts.conf), und den Exit-Status von NetCat (nc) auszuwerten:



    Das Script liefert übrigens auch "VDR down", wenn der Rechner gar nicht erreichbar oder die Netzwerkverbindung anderweitig unterbrochen ist.


    Viele Grüße, Mirko

    LinVDR - The Digital Linux Videorecorder ................................................................. http://linvdr.org

    Einmal editiert, zuletzt von cooper ()

  • nun ja, das sagt mir aber nur dass der ftpd online ist. Ich möchte aber wissen ob die VDR-Soft läuft....


    vieleicht analog dazu?


    bemerkt jemand offensichtliche fehler?

    :vdr1 VDR User #626:fans
    VDR II: YeongYang A106, Fusi D1522, Celeron 2GHz, Frontend per DVB-s FF, 2xDVB-c, ATRIC-IR, YaVDR 0.3a
    VDR III HDTV: Inter-Tech 2008V mit iMonLCD, Atric, ASRock Extreme3 770 AM3, AMD Sempron 140 1x 2.70GHz AM3, 1,5TB WD15EADS, 2TB WD20EARS, 2x4GB DDR3-1600, NVidia GT520 passiv, 3x DVB-c, YaVDR 0.5 @ Samsung PS-50B550

    Einmal editiert, zuletzt von Tobias ()

  • Hi,


    Zitat
    Code
    while [$TEST -eq 0 ] ; do
      TEST="`netcat vdr.lan 2001 | wc -l`"
      if [ $TEST -eq 0 ] ; then 
         sleep 10
      fi
    done


    bemerkt jemand offensichtliche fehler?


    Ja. Du blockierst mit dem Netcat-Aufruf den SVDRP-Port bis zum VDR-Timeout, d.h. dein Script läuft auch erst weiter, wenn das Timeout abgelaufen ist.


    Warum nicht einfach wie von mir vorgeschlagen den Exit-Status von Netcat verwenden? Ist nicht nur schneller, sondern auch deutlich eleganter als ne ungenutzte Verbindung eine Minute "rumhängen" zu lassen. Und wer weiß, vielleicht gibt VDR irgend wann nicht mehr die Statusmeldung über den SVDRP-Port beim Connect aus, dann funktioniert dein Script nicht mehr -- meins schon.


    Viele Grüße, Mirko

  • @ cooper, danke für den Hinweis ... werde mal mit deiner variante rumspielen ;)


    grüsse
    tobias

    :vdr1 VDR User #626:fans
    VDR II: YeongYang A106, Fusi D1522, Celeron 2GHz, Frontend per DVB-s FF, 2xDVB-c, ATRIC-IR, YaVDR 0.3a
    VDR III HDTV: Inter-Tech 2008V mit iMonLCD, Atric, ASRock Extreme3 770 AM3, AMD Sempron 140 1x 2.70GHz AM3, 1,5TB WD15EADS, 2TB WD20EARS, 2x4GB DDR3-1600, NVidia GT520 passiv, 3x DVB-c, YaVDR 0.5 @ Samsung PS-50B550

  • so habe ich das jetzt gemacht: Ideal für VDR-Clients !!!!


    In der runvdr kann dann der Statuscode abgefragt werden und wenn OK die VDR Soft geladen werden.

    Code
    VDRRUNNING="`./checkvdr.sh | grep -w 'STATUSCODE=OK' | wc -l`"
    if [ $VDRRUNNING -eq 0 ] ; then
      exit 1
    fi


    danke an alle für die Hilfe ...


    tobias

    :vdr1 VDR User #626:fans
    VDR II: YeongYang A106, Fusi D1522, Celeron 2GHz, Frontend per DVB-s FF, 2xDVB-c, ATRIC-IR, YaVDR 0.3a
    VDR III HDTV: Inter-Tech 2008V mit iMonLCD, Atric, ASRock Extreme3 770 AM3, AMD Sempron 140 1x 2.70GHz AM3, 1,5TB WD15EADS, 2TB WD20EARS, 2x4GB DDR3-1600, NVidia GT520 passiv, 3x DVB-c, YaVDR 0.5 @ Samsung PS-50B550

  • Hi Tobias,


    Ist ja alles nett, aber dein Script funktioniert immer noch nicht vernünftig und die Tests sind ziemlich umständlich. Fangen wir mal vorne an.

    Zitat
    Code
    #test if vdr is online
    PINGIT="`ping -c1 $VDRMACHINE |grep -w 'ttl'|wc -l`"
    if [ $PINGIT -eq 0 ]; then
      echo "VDR ist offline, starte per WOL"
      /usr/bin/wakeonlan -i 192.168.10.255 00:E0:18:B5:DD:39
      sleep 30
    else
      echo "VDR ist breits online"
    fi


    Der Test, ob VDR erreichbar ist:

    Code
    PINGIT="`ping -c1 $VDRMACHINE |grep -w 'ttl'|wc -l`"


    ist ziemlich umständlich, du hängst drei Befehlsaufrufe in eine Zeile und greppst nach etwas hoffentlich konstanten. Viel einfacher, sicherer und kürzer ist folgender Ersatz:

    Code
    ping -c1 $VDRMACHINE
    PINGIT=$?


    Ping liefert dir nämlich im Exit-Status (siehe auch Manpage), ob er das Ziel erreichen konnte oder nicht. "0" bedeutet der Ping war erfolgreich, "1" das Ziel war nicht erreichbar. Theoretisch kann's auch noch "2" geben, bei sonstigen Fehlern. Also auf "0" testen.


    Ist das Ziel nicht erreichbar, versuchst du, per WOL die Kiste aufzuwecken -- und schickst den Rest des Scripts in die Wüste, weil du nie prüfst, ob das geklappt hat oder nicht. Ich schlage daher folgenden Ersatz für den oben zitierten Block vor:

    Code
    until
      ping -c 1 $VDRMACHINE 2>&1 >/dev/null;
    do
      echo "VDR ist offline, starte per WOL"
      /usr/bin/wakeonlan -i 192.168.10.255 00:E0:18:B5:DD:39
      sleep 30
    done


    Wenn du magst, kannst du ja auch noch einen Schleifen-Counter einbauen, der z.B. nach 10 erfolglosen Aufweck-Versuchen abbricht:


    Die größeren Probleme liegen jedoch im zweiten Teil:

    Zitat
    Code
    TESTVDR="`echo "quit"|netcat $VDRMACHINE 2001| grep 'SVDRP' | wc -l`"
    i=0
    while [ $TESTVDR -eq 0 ]; do
      echo "VDR down since $i tries"
      sleep 5
      if [ $i -ge 10 ] ; then
        break
      fi
      let i+=1;
    done


    Dieser ist programmtechnisch sogar falsch, funktioniert einmal die Verbindungsaufnahme nicht, gibt es zwangsläufig einen Abbruch. Der Grund ist, dass TESTVDR bei Wiederholungen nicht neu besorgt wird, also beim zweiten Retry noch genauso falsch ist wie beim ersten. Korrekt lautet daher der zweite Teil des Scripts:


    Damit kann der letzte Programmteil ganz entfallen, da bei fatalen Fehlern die jeweiligen Schleifen das Skript mit einer entsprechenden Fehlermeldung beenden.


    Hier noch einmal das ganze Skript zum Raus-Pasten:


    ... in der Hoffnung, dass es irgend wem hilft.


    Viele Grüße, Mirko

  • Hi Mirko,


    ich sehe schon du hast um längen mehr ahnung. Bin ja auch erst seit ein paar Monáten mit linux unterwegs und bin immer noch in der "probierphase". Bin immer froh wenn am ende ein halbwegs funzendes Script rauskommt.
    Deine Änderungen sind zwar klein, aber fein ;) ;)


    Ich denke das script könnte jeder brauchen der einen VDR-Client per Streamdev unterhält.


    danke
    tobias

    :vdr1 VDR User #626:fans
    VDR II: YeongYang A106, Fusi D1522, Celeron 2GHz, Frontend per DVB-s FF, 2xDVB-c, ATRIC-IR, YaVDR 0.3a
    VDR III HDTV: Inter-Tech 2008V mit iMonLCD, Atric, ASRock Extreme3 770 AM3, AMD Sempron 140 1x 2.70GHz AM3, 1,5TB WD15EADS, 2TB WD20EARS, 2x4GB DDR3-1600, NVidia GT520 passiv, 3x DVB-c, YaVDR 0.5 @ Samsung PS-50B550

Jetzt mitmachen!

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