Shutdown-Hook für vdr-Server

  • Sehr gut, vielen Dank für den Hinweis. Das andere Script hat den Rechner nie heruntergefahren, keine Ahnung warum. Habe jetzt auch das Addon Lifeguard im Einsatz - funktioniert fast gut. Wenn ich mir am PC eine Sendung anschaue, d.h. ein Stream läuft, fährt der VDR trotzdem herunter. Ich muss also immer eine SSH-Session gleichzeitig laufen lassen. Ist zwar kein großes Problem, aber gäbe es eine Möglichkeit, das in den Griff zu bekommen?


    Dann steht nur noch die Ausgabe auf TV-Out auf dem Programm, danach läuft alles so, wie ich es gerne hätte ;)


    Gruß,
    Christoph

  • Das sollte sich machen lassen, hängt aber im Detail von Deiner Konfiguration ab. Gehe ich recht in der Annahme, dass Du als Client nicht einen VDR mit Streamdev Client Plugin benutzt sondern vlc o. dgl.? Dann sollte Dir ein zusätzlicher Eintrag in der Lifeguard Konfigurationsdatei helfen.


    Standardmäßig benutzt der Streamdev-Server den Port 3000. In diesem Fall sollte eine Zeile

    Code
    1. tcp 3000 Streamdev\ Connection

    in der Konfigurationsdatei von Lifeguard (/etc/vdr/lifeguard.conf) dafür sorgen, dass eine bestehende Streamdev-Verbindung erkannt und mit der Erklärung "Streamdev Connection" das Herunterfahren verweigert wird.


    Ebenso sollte z.B. ein Eintrag

    Code
    1. tcp 2001 SVDRP\ Connection

    eine bestehende SVDRP Verbindung erkennen und bewahren.


    Berichte doch bitte mal, ob das bei Dir funktioniert. Falls ja, werde ich die beiden Beispiele in die nächste Version des AddOns aufnehmen.


    Gruß, Malte


    P.S.: Falls ich's recht im Kopf habe, dann sorgt Streamdev selbst dafür, dass der Server nicht heruntergefahren wird während eine Verbindung zu einem Client besteht, auf dem das Streamdev Client Plugin läuft.

  • Hallo Malte,


    vielen Dank für die Antwort. Ich werde es bei Gelegenheit testen, jedoch bin ich gerade sehr weit weg vom VDR.


    Ich glaube, dass ich einen recht unkonventionellen Weg der Wiedergabe gehe. Ich greife per Samba auf den VDR zu und öffne die Dateien dann mit VLC. Teilweise öffne ich die Aufnahme auch übers Webinterface mit "Aufnahme ansehen", auch dann mit VLC.


    Wie gesagt, werde Deine Vorschläge bei Gelegenheit testen und dann berichten! Trotzdem: Auch jetzt ist der Lifeguard eine sehr große Hilfe!


    Gruß,
    Christoph

  • Hallo Christoph,


    wenn Du Samba benutzt, wird Dir wohl eher die Option 'smb' in der Konfigurationsdatei weiterhelfen. Den Eintrag gibt es schon; Du müsstest ihn nur auskommentieren.


    Im Handbuch (man vdr-addon-lifeguard) ist aufgeführt, welche Programme auf Serverseite für die unterschiedlichen Optionen benutzt werden, z.B. smbstatus für Samba. Diese Kommandos könntest Du ausprobieren - einmal mit bestehender Verbindung, einmal ohne - um zu sehen, ob und was sich ändert und welche Option Dir hilft.


    Gruß, Malte

  • Hallo Malte,


    so dachte ich mir das auch.


    Meine lifeguard.conf sieht folgendermaßen aus:



    Ich sehe gerade, dass ich den hinteren Eintrag nicht gesetzt habe. Macht das was? Oder gibt es sonstige Fehler in der Datei?


    Werde die ganzen Optionen bei Gelegenheit testen, wenn ich wieder zu Hause bin.


    Gruß,
    Christoph

  • Hallo Christoph,


    das sieht doch gut aus.


    Quote

    Ich sehe gerade, dass ich den hinteren Eintrag nicht gesetzt habe. Macht das was? Oder gibt es sonstige Fehler in der Datei?


    Falls Du die Zeile mit 'other' meinst - das ist wirklich nur eine Vorlage, für die Du erst einmal ein Skript 'myscript.sh' schreiben müsstest. Oder meinst Du die dritte Spalte? Die Einträge dort sind optional. Wenn sie fehlen, verwendet das Skript einen Standardwert für die Benachrichtigung.


    Gruß, Malte

  • Soo, ich habe mal ein wenig getestet. Wenn ich eine SSH-Session öffne, dann bleibt der VDR brav an, nur streamen über Samba lässt ihn jedoch herunterfahren.


    /var/log/messages sieht folgendermaßen aus:


    Code
    1. Apr 6 19:49:00 cubie vdr-shutdown: executing /usr/share/vdr/shutdown-hooks/S90.custom as shell script
    2. Apr 6 19:49:00 cubie vdr-shutdown: executing /usr/share/vdr/shutdown-hooks/S91.lifeguard as shell script
    3. Apr 6 19:49:01 cubie vdr: [2429] switching to channel 3
    4. Apr 6 19:49:01 cubie vdr: [2429] connect from 127.0.0.1, port 4401 - accepted
    5. Apr 6 19:49:01 cubie vdr: [2429] closing SVDRP connection
    6. Apr 6 19:49:01 cubie shutdown[3237]: shutting down for system halt
    7. Apr 6 19:49:05 cubie vdr: [2429] caught signal 15


    Das lifeguard Script wird also verarbeitet. smbstatus sieht meiner Meinung nach auch gut aus:


    Code
    1. Locked files:
    2. Pid Uid DenyMode Access R/W Oplock SharePath Name Time
    3. --------------------------------------------------------------------------------------------------
    4. 2581 1000 DENY_NONE 0x20089 RDONLY EXCLUSIVE+BATCH /var/lib/video.00 sternTV/stern_TV/2008-04-05.03.10.50.50.rec/001.vdr Sun Apr 6 19:21:32 2008


    Ich kann zwar gut damit leben, zusätzlich eine SSH-Session zu öffnen, aber ohne wäre schöner.


    Besteht da ne Möglichkeit?


    Gruß,
    Christoph

  • Hallo Christoph,


    eigentlich sollte lifeguard auf Deine Beispielausgabe anspringen. Mit anderen Worten: Ich kann ad hoc nicht erklären, was da schief läuft.


    Wie Du in S91.lifeguard sehen kannst, wird für die Option 'locks' einfach 'smbstatus -L' aufgerufen. Wenn das Ergebnis mehr als 2 Zeilen hat, wird der Rechner nicht heruntergefahren. Diese Bedinung ist bei Dir erfüllt. Ähnlich für die Option 'shares': Wenn 'smbstatus -S' mehr als 4 Zeilen ausgibt, bleibt der Rechner an. Du kannst also jederzeit überprüfen, wie lifeguard entscheiden würde, indem Du einen dieser Aufrufe aus S91.lifeguard kopierst und selbst in einer Shell ausführst.


    Flexibler bist Du, wenn Du mit der Option zu 'smb' in lifeguard.conf eine Regular Expression angibst, mit der grep die Ausgabe von smbstatus durchsuchen soll, z.B. so etwas wie "/var/lib/video.[0-9]\b*". Auch hier kannst Du testen, indem Du

    Code
    1. smbstatus | grep -cE "/var/lib/video.[0-9]*"

    selbst ausführst. Achtung: Die RE muss bis zum Spaltenende reichen, in S91.lifeguard dazu ein '\b' angehängt.


    Zum Test könntest Du auch in S91.lifeguard unterhalb von '# samba locks or shares' oder in den case-Fällen eine Zeile einfügen, die in eine Datei protokolliert, welches Ergebnis smbstatus gerade liefert.


    Gruß, Malte

  • Moin,


    smbstatus -S liefert:

    Code
    1. cubie:~# smbstatus -S
    2. Service pid machine Connected at
    3. -------------------------------------------------------
    4. IPC$ 2639 cs Thu Apr 10 12:33:01 2008
    5. video 2639 cs Thu Apr 10 12:33:02 2008


    Das sind nur 2 Zeilen. Zählt man die anderen mit sind es genau 4, aber nicht mehr als 4. Oder?


    smbstatus -L liefert:

    Code
    1. cubie:~# smbstatus -L
    2. Locked files:
    3. Pid Uid DenyMode Access R/W Oplock SharePath Name Time
    4. --------------------------------------------------------------------------------------------------
    5. 2639 1000 DENY_NONE 0x100001 RDONLY NONE /var/lib/video.00 TVtotal/TV_total/2008-04-09.23.08.50.50.rec Thu Apr 10 12:34:53 2008
    6. 2639 1000 DENY_NONE 0x20089 RDONLY EXCLUSIVE+BATCH /var/lib/video.00 TVtotal/TV_total/2008-04-09.23.08.50.50.rec/001.vdr Thu Apr 10 12:35:05 2008


    Auch hier die Frage, wie die Zeilen gezählt werden? Unterm Strich sinds 2 Zeilen, aber nicht mehr als 2 Zeilen...


    Zum Schluss noch:

    Code
    1. cubie:~# smbstatus | grep -cE "/var/lib/video.[0-9]*"
    2. 2


    Alles habe ich eben getestet, über Samba wird eine Aufzeichnung wiedergegeben, wie ja oben unschwer zu erkennen ist.


    Mich interessier nun, wie die Zeilen da verarbeitet werden!


    Gruß,
    Christoph

  • Hallo,


    zum Zählen der Zeilen wird 'wc -l' bzw. die Option '-c' von grep benutzt, Details siehe S91.lifeguard.


    wc unterscheidet nicht zwischen Überschriften, Leerzeilen, Trennzeilen und "wichtigen" Zeilen. In Deinen beiden ersten Beispielen ergibt die Zählung also jeweils 5 Zeilen, zu überprüfen z.B. mit

    Code
    1. smbstatus -S | wc -l

    Im dritten Beispiel lautet das Ergebnis 2, weil in zwei Zeilen das Muster '/var/lib/video.[0-9]*' vorkommt, nämlich den Zeilen 5 und 6 aus Deinem zweiten Beispiel. Bei einem selbstgewählten Muster sollte jeder Wert größer 0 dazu führen, dass der Rechner nicht herunterführt.


    Die Resultate von smbstatus und die Zeilenzählung scheinen mir Ordnung. Das Problem muss also irgendwo anders liegen.


    Gruß, Malte

  • Hmm ... dann scheint ja alles okay zu sein. Na ja, ich kann sehr gut damit leben, eine SSH Session gleichzeitig zu öffnen. In den nächsten Tagen setze ich einen 2. VDR auf, ich werde berichten, wie der sich verhält.


    Vielen Dank für Deine Hilfe!


    Gruß,
    Christoph

  • Ich habe leider dasselbe Problem...


    Code
    1. smbstatus -S | wc -l


    ergibt manchmal sogar 6 Zeilen, aber der PC schaltet sich dennoch ab.


    In meiner lifeguard.conf steht sowohl "smb locks" als auch "smb shares". Auch das Setzen auf ein Verzeichnis mittels RE brachte nichts... Bei allen anderen Diensten bzw. Ereignissen, die in meiner lifeguard.conf stehen, wird wie erwartet nicht heruntergefahren.


    Grüße George


    PS: Ich nutze das normale Samba-Debian-Paket aus Debian etch.

    System 1: Asus P5N7A-VM, Core2Duo 3 GHz, 4 GB RAM, 3x 640 GB WD6400AAKS, 2x DVB-T: Terratec Cinergy 1200, vdpau-Ausgabe über xineliboutput, Ubuntu 9.10 karmic mit aktuellem Kernel, VDR 1.6-Paket von Ubuntu
    System 2: Asus A7V, AMD Athlon ~ 1 GHz, 384 MB RAM, 500 GB HDD, DVB-S FF: Hauppauge Nexus-s Rev. 2.1, DH101 m. LCD, Debian lenny, Kernel 2.6.29.3, nvram-wakeup, VDR 1.6 (e-Tobi: experimental//multipatch)

  • Hallo,
    habe das gleiche Problem.
    Es hat bei mir 2 Ursachen:
    1. Im S85.lifguard ist noch ein fehler bei smb) case "$TYPE" nach $PATTERN ändern.


    2. smbstatus liefer auf der commandline zwar das richtige, aber leider nicht wenn vom vdr aufgerufen wird, dann sagt er sowas wie "smbstatus shall not call ...." und somit ist es nur eine Zeile und hat nichts mit den shares oder locks zu tuhen. Hierfür habe ich keine Lösung gefunden.


    Weiß jemand für 2. eventuel eine Lösung?


    Gruß
    vdrpoppi

  • Hallo vdrpoppi,


    smbmount läßt sich wohl nicht als non-root ausführen. Deshalb habe ich ein wenig rumprobiert. So klappt es bei mir:


    S91.lifeguard:


    und smb-status.sh

    Code
    1. /usr/bin/smbstatus -L | wc -l > /video/status.txt


    Gruß Peppi

    VIA Epia ME6000 , Nexus-s Rev 2.1, Skystar 2, 256 MB RAM, 500 GB HD, homebrew IR, c'tVDR 6.2

  • Hi,
    danke für die Antwort.


    Bei mir prüft er so aber den Status vom letzten Aufruf, und der ist typischer weise
    < 4.
    Die Prüfung findet wohl früher statt als das "at now" fertig wird.
    Kann man eventuel etwas warten?
    Oder man muss beim einschalten > 4 reinschreiben.


    Wichtig ist auch, dass der user "vdr" an der stelle wo die status.txt hin soll schreiben darf :-O

  • Hi vdrpoppi,


    versuchmal ein sleep 2 nach dem at Befehl. Du kannst zusätzlich auch jedesmal nach dem Auslesen der status.txt diese löschen (rm Befehl auskommentieren).


    /video ist bei mir ein Symlink auf /var/lib/video.00 und darauf sollte vdr definitiv schreiben dürfen.


    Gruß peppi

    VIA Epia ME6000 , Nexus-s Rev 2.1, Skystar 2, 256 MB RAM, 500 GB HD, homebrew IR, c'tVDR 6.2

  • Hallo ich habe das Skript auch drauf und angepasst.
    Nur leider fährt er partout nicht runter.


    Hier mal mein Skript


    und dazu die /var/logmessages


    Was läuft hier schief?

  • Quote

    Was läuft hier schief?


    Du versuchst in f_network f_nfs auszuführen.
    Das ist aber auskommentiert => Fehler
    Gruß
    Claus


    BTW: Könntest Du bitte mal meine Mailadresse aus dem Zitat löschen - sonst muss ich einen Admin darum bitten.

    vdr-az: ASUS P5B-E; Celeron 430@1800; 512 MB; TT S2-1600; 3*2TB WD als RAID1+5; DVD-RW; Gainward GF210; 24"-TFT an DVI; ct-vdr-7 mit vdr-sxfe
    vdr-wz: ersetzt durch Medion E24003; Twin-HD-Tuner; 500 GB; 20/0,4W; 26" LCD-TV an HDMI

    The post was edited 1 time, last by thc ().