Shutdown-Hook für vdr-Server

  • Hallo VDR-Gemeinde,


    ich habe nun schon so viel von diesem Portal profitiert, da möchte ich auch mal ein wenig beitragen.
    Ich verwalte meine beiden VDR's über ssh und Samba und kopiere auch schon mal Aufnahmen per nfs zwischen den beiden hin und her.
    Dabei ist es mir schon öfter passiert, dass einer der beiden gemeint hat, es gäbe nichts mehr zu tun (=keine Aufnahme und kein Benutzer-Event) und einfach ausgegangen ist.
    Damit das nicht mehr passiert, habe ich einen kleinen Shutdown-Hook geschrieben, der das abfangen soll. Bei mir mit meinen ct-vdr's funktioniert das auch ganz gut. Wer also auch noch an so etwas Interesse hat, kann sich das Skript von www.familie-thiemann.de/vdr/S00.custom
    herunterladen und einbinden.
    Ich habe es so gemacht, dass ich die Datei in /etc/vdr/shutdown-hooks gespeichert und einen Link darauf in /usr/share/etc/shutdown-hooks [Edit] /usr/share/vdr/shutdown-hooks für ctvdr3 [/EDIT] angelegt habe. Bei anderen Distributionen sieht das ggfs. etwas anders aus.
    Die Ports in f_network sind die Standard-Ports der Services und müssen ggfs. auch noch angepasst werden. Und um sich nicht das syslog vollzuschaufeln, kann TRY_AGAIN natürlich auf einen festen Wert eingestellt werden.
    Wenn das Skript von jemand eingesetzt wird, bitte ich um Feedback.
    Wenn es so was schon gibt, habe ich es trotz Suche nur noch nicht gefunden.


    Gruß
    Claus

    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

    Einmal editiert, zuletzt von thc ()

  • Hey hallo!
    Ich hab das Skript mal auf meinem c't-VDR angetestet und wills gleich gar nicht mehr hergeben. 8)
    Mich hat schon lange genervt, dass VDR während einer ssh-Session runtergefahren ist...
    Danach hab ich schon lange gesucht!! Ist echt super gelungen das Teil. Gratulation. Kann ich nur weiterempfehlen....

    Intel Pentium III 1000, 120 Gbyte Festplatten, 640 MB RAM, TT DVB-S 1.5
    VDR: ctvdr5...

  • Hallo, ich benutze das Skript auch. Jedoch habe ich ein paar Kleinigkeiten geändert. Die NFS Funktion ist bei mir auskommentiert. Für Streamdev habe ich den Port 3000 ergänzt. Dann ist mir aufgefallen das TRY_AGAIN so gar keine Wirkung hat. Nachdem ich mir die vdr-shutdown angeschaut habe, ist mir auch aufgefallen woran es liegt. TRY_AGAIN wird nur ausgeführt wenn der exitcode auf 0 steht.
    So klappt es bei mir auch mit TRY_AGAIN

    Code
    # Eigentlichen Shutdown-Hook ausloesen
    if [ $N -gt 0 ] ; then
        echo "TRY_AGAIN=15"
    fi
    exit 0


    Die Zeile

    Code
    echo "ABORT_MESSAGE=\"$N Verbindung offen.\""

    erzeugt einen Error in der vdr-shutdown. /tmp/vdr.err "vdr-shutdown - To many Arguments" oder so. Habe dann mal rumprobiert und es scheint am $N zu liegen. Ich brauch die Meldung aber gar nicht, darum ist sie bei mir ganz rausgeflogen.


    Grüsse Marc

  • Zitat

    Für Streamdev habe ich den Port 3000 ergänzt


    Stimmt - der fehlte noch - kommt mit rein.


    Zitat

    TRY_AGAIN wird nur ausgeführt wenn der exitcode auf 0 steht.


    Das bedeutet ja, dass man immer das Skript anpassen muss: Will man einen Retry, muss der Exitcode 0 sein, ansonsten darf er nicht 0 sein.
    Oder man gibt immer 0 zurück und setzt RETRY auf z.B. die Mindest-Benutzer-Inaktivität.
    Das werde ich dann wohl mal als Default vorsehen.


    Aber ich brauch ein wenig Nachhilfe zum nfs-Teil.
    Ich habe nämlich festgestellt, dass die $RMTAB bestehen bleibt, wenn der nfs-Client sich ohne umount verabschiedet.
    Das führt dazu, dass der VDR gar nicht mehr abschaltet.
    Der Eintrag überlebt sogar einen Reboot.
    Frage deshalb: Wie kann man die $RMTAB verifizieren?


    Gruß
    Claus

    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

  • also ich arbeite bei meinem vdr nach einem anderen viel einfacheren prinzip, ich suche nicht nach einzelen ports sondern nehme einfach diesen befehl:

    bin mir nicht sicher aber ca. so:
    netstat -an | grep estabished


    wenn ein established gefunden wird, besteht irgendeine Netzwerk verbindung, und wenn irgendeinen netzwerk verbindung besteht, dann bedeutet das das jemand per netzwerk auf den vdr zugreift, und dann gibts keinen shutdown. So einfach ist das und funktioniert wunderbar. Wenn man bestimmte ports vom test ausschliessen will, kann man dies perfekt mit grep machen ( grep -v ).


    Hier der Link zum Script:
    http://www.myvdr.de/script_checkscriptshutdownok.php


    Viel Spass damit, funktioniert super Problemlos bei mir.

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • BlackKing


    "netstat -an" ist schon klar, ich möchte aber zusätzlich gerne wissen, warum der VDR nicht ausgeht, wenn mindestens eine Verbindung offen ist.
    [EDIT]
    Ist aber ne Überlegung wert, nur dann in die Einzelprüfungen zu gehen, wenn es Verbindungen mit dem Status "established" gibt - das entschärft dann auch gleich das Problem mit der fehlerhaften rmtab.
    [/Edit]


    Gruß
    Claus

    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

    Einmal editiert, zuletzt von thc ()


  • Mein Script schreibt die betreffenden Dienste die den Shutdown verhindert haben, in eine Logdatei.
    netstat -an|grep -v "192.168.1.1:445deactiviert"|grep -v "127.0.0.1:2001"|grep ESTABLISHED >>${LOGFILE}


    Das reicht mir voellig aus, im OSD erscheint noch die Meldung "Netzwerk verbindungen offen" , oder aehnlich.


    Um dann rauszufinden warum er nicht ausgeht schaue ich einfach in die Log.


    Man kann es aber ja sich alles leicht an die eigenen Beduerfnisse anpassen. Ist Linux not Windows

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Ok,
    und wie bekommst Du heraus, ob eine nfs-Verbindung offen ist?
    Bei mir schweigt sich netstat dazu aus - oder ich bin zu blöd, das zu sehen.
    Gruß
    Claus


    [Edit]
    Ich habe die angesprochenen Änderungen eingepflegt, d.h. die aktuelle Fassung steht unter dem Link im ersten Beitrag zum Abruf bereit.
    [/Edit]

    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

    Einmal editiert, zuletzt von thc ()

  • aso, das habe ich mir noch gar nicht angeschaut, ob er bemerkt das eine nfs verbindung offen ist, aber ich denke schon.
    Ich habe nur einen rechner der eine nfs verbindung aufbaut, und nutzt, deswegen pinge ich den zusaetzlich an. Es ist mein vdr client, und wenn der laueft, dann darf der vdr nicht ausgehen, auch wenn keine nfs verbindung offen ist.


    Es ist aber sichlerich ganz einfach sich anzeigen zu lassen,ob jemand sich mit nfs verbunden hat. Ich denke mit grep kann man alles in dem bereich machen was man braucht.



    MFG
    Ulrich

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Gruß an Familie Thiemann:


    Ich habe eine Anpassung für den hook für ctvdr 3.06, der Ort der svdrpsend.pl - Datei hat sich geändert.


    alt: SVDRP=/usr/share/vdr/svdrpsend.pl
    neu: SVDRP=/usr/lib/vdr/svdrpsend.pl

  • Und noch eine weitere Änderung, die ich vornehmen musste damit ct vdr 3.06 den hook erkennt:


    Der Link muss statt in /usr/share/etc/shutdown-hooks nach /usr/share/vdr/shutdown-hooks gesetzt werden.


    In den anderen hooks von ct stehen nun, wenn der hook greift exit-codes von 1 drin. Ausserdem setzen sie immer den TRY_AGAIN - Wert.


    Am Ende des Files von Fam. Thiemann habe ich also gesetzt:

    Code
    # Eigentlichen Shutdown-Hook ausloesen
    if [ $N -gt 0 ] ; then
        echo "ABORT_MESSAGE=\"$N Verbindungen offen.\""
        echo "TRY_AGAIN=5"
        exit 1
    fi
    exit 0


    Damit klappts auch mit dem 3.06.

  • Zitat

    Der Link muss statt in /usr/share/etc/shutdown-hooks nach /usr/share/vdr/shutdown-hooks gesetzt werden.


    Stimmt - das stammt noch aus der ctvdr2.


    Zitat

    In den anderen hooks von ct stehen nun, wenn der hook greift exit-codes von 1 drin. Ausserdem setzen sie immer den TRY_AGAIN - Wert.


    Das widerspricht aber der Aussage von zulu weiter oben.
    Ich habe das so verstanden, dass entweder ein Exitcode != 0 oder das Setzen von TRY_AGAIN den Hook auslöst, wobei TRY_AGAIN=0 keinen automatischen neuen Versuch bewirkt.
    Habe ich aber nicht mehr überprüft, weil es bei mir so funktioniert.
    thoralf: Wird TRY_AGAIN denn ausgewertet, wenn der Exitcode nicht 0 ist - sprich er macht den nächsten Shutdown-Versuch nach z.B. 5 Minuten?


    Gruß
    Claus

    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

  • Zitat

    thoralf: Wird TRY_AGAIN denn ausgewertet, wenn der Exitcode nicht 0 ist - sprich er macht den nächsten Shutdown-Versuch nach z.B. 5 Minuten?


    Hab ich mal getestet. Try_again wird bei exit code 0 korrekt ausgewertet und er versucht es in 5 min. nochmals.


    Kann man diesen retry irgendwie deaktivieren z.B. durch Kanal umschalten oder eine "useraction"?

  • Zitat

    Kann man diesen retry irgendwie deaktivieren


    Keine Ahnung und auch keine Lust, den Quellcode vom vdr daraufhin abzusuchen.
    Deshalb hab ich auch TRY_AGAIN=0 drin stehen und hoffe einfach, dass der VDR damit auf die Standards zurückfällt.
    Unsere beiden VDR zu Hause gehen damit jedenfalls irgendwann zuverlässig wieder aus - aber da schlafe ich dann schon.
    Gruß
    Claus

    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

  • hallo zusammen,


    hab mir das script mal geladen und in /usr/share/vdrdevel/shutdown-hooks eingetragen: pfad der svdrpsend.pl zu vdrdevel geändert.


    nun bekomme ich zwar eine korrekte meldung aufs osd "verbindunen offen" - nur danach wird der shutdown ganz normal ausgführt!


    syslog:
    Mar 9 19:00:17 vdr vdrdevel-shutdown: executing /usr/share/vdrdevel/shutdown-hooks/S00.custom as shell script
    Mar 9 19:00:17 vdr S00.custom[26835]: Anzahl Verbindungen zu Secure-Shell auf Port 22: 3
    Mar 9 19:00:17 vdr S00.custom[26835]: 3 Verbindung(en) zu Secure-Shell offen.
    Mar 9 19:00:17 vdr S00.custom[26835]: tcp 532 0 192.168.1.2:22 192.168.1.3:1422 ESTABLISHED
    Mar 9 19:00:17 vdr S00.custom[26835]: tcp 0 0 192.168.1.2:22 192.168.1.3:1426 ESTABLISHED
    Mar 9 19:00:17 vdr S00.custom[26835]: tcp 0 0 192.168.1.2:22 192.168.1.3:1428 ESTABLISHED
    Mar 9 19:00:20 vdr S00.custom[26835]: Anzahl Verbindungen zu Samba auf Port 139: 1
    Mar 9 19:00:20 vdr S00.custom[26835]: 1 Verbindung(en) zu Samba offen.
    Mar 9 19:00:20 vdr S00.custom[26835]: tcp 0 0 192.168.1.2:139 192.168.1.3:1461 ESTABLISHED
    Mar 9 19:00:23 vdr S00.custom[26835]: Anzahl Verbindungen zu Samba auf Port 445: 0
    Mar 9 19:00:23 vdr S00.custom[26835]: Anzahl Verbindungen zu Streamdev auf Port 2004: 0
    Mar 9 19:00:23 vdr S00.custom[26835]: Anzahl Verbindungen zu Streamdev auf Port 3000: 0
    Mar 9 19:00:23 vdr S00.custom[26835]: Anzahl Eintraege in /var/lib/nfs/rmtab: 0
    Mar 9 19:00:23 vdr vdrdevel-shutdown: executing /usr/share/vdrdevel/shutdown-hooks/S50.noad as shell script
    Mar 9 19:00:23 vdr vdrdevel-shutdown: executing /usr/share/vdrdevel/shutdown-hooks/S50.vdrconvert as shell script
    Mar 9 19:00:24 vdr vdrdevel-shutdown: executing /usr/share/vdrdevel/shutdown-hooks/S90.custom as shell script
    Mar 9 19:00:24 vdr vdrdevel-shutdown: executing /usr/share/vdrdevel/shutdown-hooks/S90.nvram-wakeup as shell script
    Mar 9 19:00:24 vdr vdr-nvram-wakeup: /usr/sbin/nvram-wakeup -ls 1110397200 -C /etc/nvram-wakeup.conf
    Mar 9 19:00:25 vdr kernel: Non-volatile memory driver v1.2
    Mar 9 19:00:25 vdr nvram-wakeup[26992]:
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: All values are displayed as they are stored in the nvram/rtc.
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: (and do not correspond necessarily to the system date/time)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]:
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: WakeUp : Enabled (0x83)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: Day : 09 (0x49)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: Hour : 14 (0x6E)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: Minute : 00 (0x00)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: Second : 00 (0x40)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: rtcDay : 09 (0x09)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: Checksum: 0xD1CF
    Mar 9 19:00:25 vdr nvram-wakeup[26992]:
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: Enabling (0x83) WakeUp-on-RTC in nvram.
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: New Day : 09 (0x49)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: New Hour : 20 (0x74)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: New Minute : 35 (0x23)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: New Second : 00 (0x40)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: New rtcDay : 09 (0x09)
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: New Checksum: 0xD1F8
    Mar 9 19:00:25 vdr nvram-wakeup[26992]:
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: Now really WRITING into /dev/nvram...
    Mar 9 19:00:25 vdr nvram-wakeup[26992]: The changes to take effect, you must reboot your computer now.
    Mar 9 19:00:25 vdr nvram-wakeup[26992]:
    Mar 9 19:00:25 vdr vdr-nvram-wakeup: nvram-wakeup: everything ok - need to reboot first
    Mar 9 19:00:26 vdr shutdown[27003]: shutting down for system reboot



    was mache ich falsch ? danke für jeden tipp!


    gruß


    marpiet



    HDVDR: yavdr-0.6.0-stable: Intel G2120,Intel DH 77EB mit CIR, Co-Haus CIR, 64 GB SSD, 3 TB WD Red, Cine S2 V6.5 + Duoflex S2 an Centauri Multiswitch,
    Zotac Nvidia GT 630

    :prost2


  • marpiet
    Falls das Problem immer noch existiert:
    Kann es sein, dass Du weder TRY_AGAIN noch den Exitcode auf einen Wert ungleich 0 setzt?
    Gruß
    Claus

    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

  • Leider in gänzlicher Unkenntnis dieses Skriptes habe ich vor einer Weile etwas Ähnliches programmiert, das Tobi als Paket vdr-addon-lifeguard dankenswerterweise in sein Archiv aufgenommen hat. Inwieweit es Deinen Wünschen entspricht, kann ich leider nicht beurteilen. Doch es passt zum aktuellen c't VDR.


    Gruß, Malte

Jetzt mitmachen!

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