Ich habe ein Skript als Shutdown-Hook, das beim Herunterfahren des VDR prüft, ob der DLNA-Server des Rechners gerade offene Verbindungen hat und das Ausschalten in diesem Fall um 10 Minuten verzögert. Damit der VDR herunterfahren darf, dürfen bei drei aufeinanderfolgenden Prüfungen (sprich: Ausschaltversuchen) keine offenen Verbindungen bestanden haben. Schließlich möchte man ja nicht, dass sich der VDR mal eben beim "Umschalten" zwischen gestreamten Videos schlafen legt... doch genau das passiert, wenn man etwa nach einem Video mal kurz einen "Health check" einschiebt, um erst danach das nächste zu starten.
Eine erste Analyse von syslog zeigt, dass das Skript wunschgemäß dreimal hintereinander eine Verzögerung von jeweils 10 Minuten anfordert. Zum Beispiel hier:
QuoteDisplay MoreSep 27 23:34:02 HTPC shutdown-hook: S80.dlna 1727557140 84298 47 Nachrichten 0
Sep 27 23:34:02 HTPC shutdown-hook: S80.dlna -f $CHECKS [/tmp/S80.dlna.checks]
Sep 27 23:34:02 HTPC shutdown-hook: S80.dlna Previous attempts: 3
Sep 27 23:34:02 HTPC shutdown-hook: S80.dlna Remaining attempts: 2
Sep 27 23:34:02 HTPC shutdown-hook: S80.dlna Host = 192.168.178.25, Port = 8200, Streams = 0, Attempts = 2
Sep 27 23:34:02 HTPC shutdown-hook: S80.dlna $ATTEMPTS [2] -gt 0
Der VDR quittiert die Verzögerung um 10 Minuten auch entsprechend:
QuoteSep 27 22:35:02 HTPC vdr-shutdown: /usr/local/lib/vdr/shutdown-hooks/S80.dlna requests to try again in 10 minutes
Doch der nächste Versuch startet nicht erst nach 10 Minuten, sondern bereits nach 5 Minuten:
QuoteDisplay MoreSep 27 23:40:04 HTPC shutdown-hook: S80.dlna 1727557140 83936 47 Nachrichten 0
Sep 27 23:40:04 HTPC shutdown-hook: S80.dlna -f $CHECKS [/tmp/S80.dlna.checks]
Sep 27 23:40:04 HTPC shutdown-hook: S80.dlna Previous attempts: 2
Sep 27 23:40:04 HTPC shutdown-hook: S80.dlna Remaining attempts: 1
Sep 27 23:40:04 HTPC shutdown-hook: S80.dlna Host = 192.168.178.25, Port = 8200, Streams = 0, Attempts = 1
Sep 27 23:40:04 HTPC shutdown-hook: S80.dlna $ATTEMPTS [1] -gt 0
Sep 27 23:40:04 HTPC vdr-shutdown: /usr/local/lib/vdr/shutdown-hooks/S80.dlna requests to try again in 10 minutes
Und nicht einmal 5 Minuten, sondern schon vier Minuten später passiert es dann:
QuoteDisplay MoreSep 27 23:44:06 HTPC vdr-shutdown: executing /usr/local/lib/vdr/shutdown-hooks/S80.dlna as shell script
Sep 27 23:44:06 HTPC shutdown-hook: S80.dlna 1727557140 83694 47 Nachrichten 1
Sep 27 23:44:06 HTPC shutdown-hook: S80.dlna -f $CHECKS [/tmp/S80.dlna.checks]
Sep 27 23:44:06 HTPC shutdown-hook: S80.dlna Previous attempts: 1
Sep 27 23:44:06 HTPC shutdown-hook: S80.dlna Remaining attempts: 0
Sep 27 23:44:06 HTPC shutdown-hook: S80.dlna Host = 192.168.178.25, Port = 8200, Streams = 0, Attempts = 0
…
Sep 27 23:44:07 HTPC vdr-shutdown: executing /usr/local/lib/vdr/shutdown-hooks/S90.rtcwake as shell script
Das entspricht nicht dem – zumindest intuitiv – erwarteten Verhalten:
- Wenn der VDR in seinen normalen Shutdown-Timeout läuft, darf er gerne alle 5 Minuten einen Ausschaltversuch unternehmen.
- Exkurs: Sobald man eine Taste drückt sollte der Shutdown-Timeout aufgrund der Nutzeraktivität wieder von vorne beginnen (bei mir sind das drei Stunden). Tut er aber nicht: man muss schon ein paar Mal die Power-Taste drücken und das Ausschalten gleich danach manuell abbrechen, damit der VDR Ruhe gibt.
- Wenn man es nicht geschafft hat, das Ausschalten manuell abzubrechen, geht das Drama kurz darauf von vorne los. Im schlimmsten Fall – und das ist mir auch schon ein paarmal passiert – schaltet sich der Rechner selbst mitten in der Wiedergabe einer Aufzeichnug ohne Vorwarnung aus.
- Wenn ein Shutdown-Hook eine andere Verzögerung anfordert, sollte der VDR diese beachten und nicht schon vor der angeforderten Zeit den nächsten Versuch unternehmen.
Hat jemand ähnliche Erfahrungen gemacht? Vielleicht kann kls nochmals erläutern, wie das Zusammenspiel der beiden Mechanismen gedacht ist. Der Code in vdr.c ist diesbezüglich etwas komplex, weshalb ich noch nicht so richtig schlau daraus geworden bin.
Zumindest fand ich es doch sehr irritierend, mitten im Video (sowohl remote beim Streaming als auch direkt beim Schauen auf dem VDR) auf einmal den Rechner ausgeschaltet zu bekommen.