Wie funktioniert das mit dem Shutdownscript

  • Moin,
    ich hab da eine Frage:
    ich versuche ein Shutdownscript zu bauen, damit mein VDR herunterfährt und zur nächsten Aufnahme wieder hochfährt.
    Das soll mit NVRAM laufen, klappt aber noch nicht so ganz.
    Ich habe gelesen, dass das Script so übergeben wird:


    Quote


    -s $PATH/shutdown.sh
    --shutdown=$PATH/shutdown.sh


    Ist das richtig?


    Und dann habe ich gelesen, dass da Irgendwelche Parameter übergeben werden. Da wiedersprechen sich leider einige Wikieinträge.
    Ich habe was von $1 und $2 gelesen. Sind jetzt $1 oder $2 die Sekunden bis zur nächsten Aufnahme oder wie läuft das?


    Mein Scriptteil sieht jetzt so aus:


    Quote

    timer=$(($1 / 60)) #Aus Sekunden werden Minuten


    nvram-wakeup -C /etc/nvram-wakeup.conf --directisa -s $(date +%s -d +$(($timer))minutes)


    /sbin/shutdown -h now


    Kann mir da jemand helfen?

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • Tschuldigung, habs gefunden


    $1 = Zeit des nächsten Timers (in UTC) (0, falls kein Timer ansteht)
    Hinweis: $1 ist mindestens die aktuelle Zeit + 15 Minuten
    $2 = Sekunden bis zum nächsten Timer (0, falls kein Timer ansteht)
    $3 = Kanal für die nächste Aufnahme
    $4 = Dateiname für die nächste Aufnahme
    $5 = Grund des Shutdowns (0 - automatisch, 1 - User)



    Aber stimmt das mit der Scriptübergabe?

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • Das soll mit NVRAM laufen, klappt aber noch nicht so ganz.


    Wie startest du denn den VDR bzw. woher stammt der? Falls das ein nach der Vorlage von e-Tobi gebautes VDR-Paket mit den ganzen Skripten und dem Shutdown-Wrapper drum herum ist, musst du dir halt mal im Quellpaket anschauen wie die Mechanismen funktionieren oder mehr Details verraten.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Und habe hier:


    http://www.vdr-wiki.de/wiki/index.php/Shutdown.sh


    was über die Übergabe gelesen. Haut das hin? Also ist mein Script nicht übergeben oder kaputt.

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • Dann hast du genau den Fall. Hol dir mal mit "apt-get source vdr" den Quelltext und schau es dir an (und vor allem die README.Debian im debian-Verzeichnis des Quellpakets), wenn es dich interessiert.


    Grob umrissen funktioniert das bei den Paketen mit e-Tobi-Skripten so:
    Der VDR nutzt für die Shutdown-Skripte einen Wrapper (/usr/lib/vdr/vdr-shutdown.wrapper - ist ein in C geschriebenes Programm, daher sieht man nur im Quelltext was das macht), der dafür sorgt, dass die Shutdown-Skripte aufgerufen werden. Die passiert über /usr/lib/vdr/vdr-shutdown, das die Shutdown-Skripte im Verzeichnis /usr/share/vdr/shutdown-hooks/ nacheinander ausführt. Daher ist es am einfachsten, wenn du dein Skript für das nvram-Wakeup vor dem S99.shutdown ausführen lässt (indem du es z.B. als /usr/share/vdr/shutdown-hooks/S98.nvram ablegst).

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Bei mir sind es .custom Dateien


    Wichtig ist nur, was das Skript vdr-shutdown haben will - bei dem yaVDR VDR Paket sucht es alle Dateien in dem Verzeichnis ohne Rücksicht auf ihre Endung (Zeile 24):

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Noch so 'ne Frage:
    Ich baue gerade mein Script und dann kommt das:


    Quote


    ./S89.custom: Zeile 12: [10: Kommando nicht gefunden.
    Ausschalten lohnt sich nicht


    Mein Code:



    Was ist das?

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • Hab's:



    Da fehlten Leerzeichen.

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • Code
    1. if [$timer -gt $((14))] ; then


    Was ist die Idee dahinter? Das kannst du doch einfach dem Brückentimer des VDR überlassen, dafür gibt es ja die Einstellung ;) http://vdr-wiki.de/wiki/index.php/Benutzerhandbuch#Sonstiges

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Immer wenn da dann steht "VDR wird in x Minuten abgeschaltet" passiert da nach nichts!!


    Mein Script:




    Gespeichert in:


    /usr/share/vdr/shutdown-hooks


    und


    /etc/vdr/shutdown-hooks


    als
    S89.custom


    und in
    /usr/local/bin/vdrshutdown

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • Wenn das durchlaufen soll, darf es nur den Exit-Code 0 zurückgeben, spricht kein echo auf stdout, wenn es nicht abbrechen soll.


    Gehen wir es mal durch - Zeile 3 kann bereits einen Abbruchgrund liefern, wenn "aus" schon existiert. Wenn überhaupt mit absolutem Pfad und mit dem Argument "-p", damit es in dem Fall keinen Fehler wirft.

    Code
    1. mkdir -p /tmp/aus


    Zeile 5 - 9 sind eigentlich überflüssig, der Shutdown findet doch eigentlich sowieso nach dem Skript in S99.shutdown statt. Das echo hat da genauso wie in Zeile 14 nichts verloren, weil es nach stdout schreibt.
    Zeile 21 - 25 sind eigentlich doch auch ohne Sinn, denn wenn es einen Timer in naher Zukunft gibt, zählt der Wert für die Brückenzeit zwischen Timern, die du in den VDR-Einstellungen setzen kannst. In dem Fall wird der VDR sowieso nicht herunterfahren.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • das mit mkdir habe ich geändert. Bringt nichts. Script an vdr neu übergeben?

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • Neue Version:


    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren

  • - Teste das Script an der Shell (d.h. selber von der Kommandozeile aus aufrufen) gründlich für alle möglichen Fälle ("set -x" ist dabei hilfreich).
    - Setze "#!/bin/sh" und teste es dann mit "checkbashisms" darauf das da keine bash Sachen drin sind (posix Shell und bash Syntax mischen baut schwer debugbare Fehlerquellen ein).


    BTW: Hier mal mein altes nvram Wakeup Script (Basiert auf dem was mal bei easyVDR 0.6 dabei war)


    (Wobei das in beiden Fällen rebootet (War wegen WOL bei mir notwendig))


    cu

  • Code
    1. nvram-wakeup -C /etc/nvram-wakeup.conf --directisa -s $1
    2. nvram-wakeup -C /etc/nvram-wakeup.conf --directisa -s $(date +%s -d +$(($timer))minutes)


    Bau da am besten auch mal absolute Pfade ein:

    Code
    1. /usr/sbin/nvram-wakeup -C /etc/nvram-wakeup.conf --directisa -s $1
    2. /usr/sbin/nvram-wakeup -C /etc/nvram-wakeup.conf --directisa -s $(date +%s -d +$(($timer))minutes)


    Da fehlt ein "t" am Anfang

    Code
    1. eimer=$(($1 / 60)) #Damit da was steht, geht sonst irgendwie nicht.


    $EXITSTATUS hast du ja nicht definiert:

    Code
    1. exit $EXITSTATUS


    BTW: warum benutzt du eigentlich nicht das Paket nvram-wakeup, das schon alles mitbringt ?(

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Der Code läuft soweit:




    Ich würde jetzt gerne überprüfen, ob $2 = 0 ist. Geht bei mir aber leider nicht so:


    Code
    1. if [ $2 -eq 0 ]
    2. then
    3. echo "gleich"
    4. else
    5. echo "ungleich"
    6. fi

    Meine VDR:
    VDR-Server: 2x DVBSKy S952 Dual DVB-S/S2 PCIe + WD-Red 8TB als VM-Guest mit PCIe-Passthrogh auf einem Ryzen7 VM-Host (virtualisiertes OS: Ubuntu)
    VDR-Client1: Asus C8HM70-I/HDMI | Ubuntu-Mate + Kodi + XVDR | Pulse Eight CEC USB
    VDR-ClientN: Alles andere am Netzwerk, überwiegend mit Kodi und XVDR


    Mediathekview/VDR-Aufnahmen nach Staffeln usw. sortieren