Testen der Schleife / Funktionsweise von runvdr - ich steh auf dem Schlauch

  • Hi,


    ich steh gerade ein wenig auf dem Schlauch.


    Die Schleife in "meiner" runvdr sieht wie folgt aus:


    Code
    while (true) do
          eval $VDRCMD >/dev/null 2>&1
          if test $? -eq 0 -o $? -eq 2; then exit; fi
          $KILL $VDRPRG
          sleep 10
          UnloadDriver
          LoadDriver
          done


    In der runvdr.template steht aber das:


    Code
    while (true) do
          eval "$VDRCMD"
          if test $? -eq 0 -o $? -eq 2; then exit; fi
          echo "`date` reloading DVB driver"
          $KILL $VDRPRG
          sleep 10
          UnloadDriver
          LoadDriver
          echo "`date` restarting VDR"
          done


    Kann mir jemand den Unterschied beim "eval"-Befehl und hauptsächlich die Funktionsweise des "test" im runvdr-Skript erläutern (ich hab es nicht so mit Bash-Scripting)?
    Gibt es eine Möglichkeit zu testen ob die Schleife richtig funktioniert und der VDr tatsächlich neu gestartet wird?


    Danke und Gruss


    Macavity

    Capulet:
    HW: Dell Dimension 3100, Pentium 4 3GHz, 2GB RAM, 160GB HDD (System), 1TB HDD (Video), 1 x TT S2-1600, 1 x Technisat Skystar HD | SW: Debian 7.4, VDR 2.0.4 (selfcompiled), dummydevice 2.0.0, streamdev-server 0.6.1, NFS-Server


    TiViPi01:
    HW: Raspberry Pi Mod. B Rev. 2, 512MB RAM, 8GB SD-Card, Teko TEK-BERRY.9 Gehäuse, Ednet 85024 USB 2.0 Hub, Digitainer X10 Funk-Fernbedienung | SW: Raspbian 01/2014, VDR 2.0.4 (selfcompiled), rpihddevice 0.0.8, ffmpeg 1.0.8, streamdev-client 0.6.1, NFS-Client

  • Das ">/dev/null 2>&1" leitet die Ausgaben des vdr ins Nirvana um, ansonsten hängt es vom init-System ab, wo diese landen. systemd und upstart sammeln die in Logfiles, was SysV macht, weiß ich nicht genau.


    Der Test wertet den Rückgabewert des vdr aus. 0 bzw. 2 ist ein reguläres Ende und die Schleife wird verlassen. Bei allen anderen Werten wird der vdr neugestartet.


    Testen kannst du das, indem du z.B. einen Segfault simulierst, also "kill -SEGV <PID des vdr>" als root ausführst.


    Lars.

  • Nachdem bei Debian auf systemd umgestellt wurde, verzichte ich ganz auf die Schleife, denn bei Fehler müsste ja systemd neustarten. Treiber laden und entladen brauch ich auch nicht mehr.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Hi,


    danke an alle für die Antworten.


    mini73
    BS ist ein "älteres" Debian (siehe Signatur). Müsste somit SysV sein.
    Das mit dem "killen" werde ich nachher mal testen.


    Gruss


    Macavity

    Capulet:
    HW: Dell Dimension 3100, Pentium 4 3GHz, 2GB RAM, 160GB HDD (System), 1TB HDD (Video), 1 x TT S2-1600, 1 x Technisat Skystar HD | SW: Debian 7.4, VDR 2.0.4 (selfcompiled), dummydevice 2.0.0, streamdev-server 0.6.1, NFS-Server


    TiViPi01:
    HW: Raspberry Pi Mod. B Rev. 2, 512MB RAM, 8GB SD-Card, Teko TEK-BERRY.9 Gehäuse, Ednet 85024 USB 2.0 Hub, Digitainer X10 Funk-Fernbedienung | SW: Raspbian 01/2014, VDR 2.0.4 (selfcompiled), rpihddevice 0.0.8, ffmpeg 1.0.8, streamdev-client 0.6.1, NFS-Client

Jetzt mitmachen!

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