Wiederkehrender Reboot in Idle Mode

  • Suche eine Möglichkeit, wiederkehrend (cron) meine 7080 mal zu rebooten und danach soll die Box in den Idle Mode wechseln. Hintergund sind kleine Helferlein, die immer wieder nach einiger Zeit nicht mehr richtig arbeiten und ein Reboot der Box fixt das Problem.


    Danke für Hinweise auf existierende Plugins/Scripte oder einfach auch nur Ideen, wie man das machen kann.

  • einfachster Weg:


    über cron den reboot anstossen und über die /etc/rc.local (oder ein script in der /rc.local aufgerufen) im Hintergrund in einer while Schleife solange das WebIF abrufen, bis es erreichbar ist und dann den idle command über das WebIF absenden.


    Wenn die Sicherheitsmaßnahmen im WebIF aktiviert sind, funktioniert das aber nicht mit wget. Entweder die Sicherheitsmaßnahmen deaktiveren oder mit curl einen POST command senden.


    Ich glaube ich habe so ein script bereits hier mal im Board gepostet, hab's aber auf die Schnelle nicht gefunden

  • Danke Fred, das scheint ein gangbarer Weg!


    Beim Reboot via cron muss man noch abchecken, dass keine Aufnahmen laufen oder in Kürze beginnen. Ansonsten müsste das so laufen wie Du sagtest. Mit einer Checkpunktdatei im /data kann man die rc.local Aktivität noch so kontrollieren, dass sie nur dann ausgeführt wird, wenn vorher der cron reboot stattfand. Will ja nicht bei jedem Reboot in den Idle :tongue:


    Man sieht, ruckzuck hat man wieder etliche Bedingungen, Abhängigkeiten etc. Aber das müsste dennoch so funktionieren. Wenn Du Dein Script noch findest, freue ich mich über den Pointer!


    Frage mich eh, ob nur ich das Problem mit dem Helferlein hab, dass nach gewisser Zeit der Himmel immer dunkel bleibt und dann ein Reboot her muss :rolleyes:

  • das script ist sicher aus OE2.0 wenn nicht aus OE1.6 Zeiten, kann gut sein dass nicht mehr alles so funktioniert, timercheck und running recording check ist sicher auch nicht vorhanden und alles wird mit wget abgefragt


    Wie gesagt, mit wget hast du nur Erfolg, wenn die Web-IF Sicherheitsmaßnahmen deaktiviert sind. Ich würde gleich alles mit curl machen, dann ist es egal, ob die Sicherheitsmaßnahmen aktiv sind oder nicht


    curl muss man nachinstallieren, zur Sicherheit auch die coreutils und bin-utils - mit den vollwertigen binaries ist das meist einfacher als mit den abgespeckten busybox commands



    Man muss zuerst die sessionid abfragen und dann mit curl einen POST command senden. Den Ansatz mit curl findest du u.a. im DMM Board: https://dreambox.de/board/inde…&postID=172287#post172287


    Aber es geht auch eleganter


    per WebIF command kannst du dann auch prüfen ob eine Aufnahme läuft und wg. der bevorstehenden Timer muss man die /etc/timers.xml filtern


    Solange in einer whileschleife alle x Minuten prüfen - erst wenn beide Bedingungen false sind rebooten und voher eine Prüfdatei erstellen


    Beim Hochfahren prüfen ob die Prüfdatei existiert, wenn ja, in einerer whileschleife prüfen, ob das Web-If erreichbar ist. Wenn ja, ist e2 durchgestartet und erst dann kann man den den standby command übers Web-IF senden.


    Bis auf die Prüfung der bevorstehenden Timer ist das gar nicht so viel Aufwand



    Wäre es nicht einfacher mit einem watchdog zu prüfen, ob die helferlein noch aktiv sind? Dann würde die Box dann erst rebooten wenn Bedarf besteht und keine Aufnahme auf den Sendern läuft, die auf das Helferlein angewiesen sind.


    Wenn der "Dienst" tod ist, kann man auch rebooten, wenn eine Aufnahme eines betroffenen Sendern läuft - die Aufnahme ist dann sowieso nicht mehr brauchbar ...

    Gruß Fred


    Die Dreambox ist tot, es lebe die Dreambox

    Edited 3 times, last by Fred Bogus Trumper ().

  • Danke nochmal Fred. Das Gerüst ist mehr oder weniger klar bzw. von Dir skizziert. Die 2 Sicherheitseinstellungen im WebIF hab ich eh schon abgestellt, da ich bereits einige alte Scripte habe, die per wget gewisse Dinge machen.


    Die Helferlein, die ich hier meine, haben keinen eigenen Dienst. Wüsste nicht, wie man hier mit nem watchdog weiterkommt. Daher war meine Idee, präventiv einfach mal täglich oder 2-täglich die Kiste nachts durchstarten.

  • Bin aus Interesse schon am Basteln - ich habe schon länger kein umfangreichers script gemacht ;)


    Gings dir nur ums Grundgerüst oder wärst du auch an einem Beispielscript interessiert. Die Abfrage einer laufenden Aufnahme mit curl bei aktiven Sicherheitsmaßnahmen ist etwas tricky und funktioniert etwas anders als mit wget - gerade gut eine Stunde damit versch***** :D

    Gruß Fred


    Die Dreambox ist tot, es lebe die Dreambox

    Edited 2 times, last by Fred Bogus Trumper ().

  • Danke Fred. Schön wenn ich Deine Bastellust geweckt habe. Gerne nehme ich das Script von Dir, teste und geb Dir Rückmeldung. Die "wget" Variante ist mir mehr als recht. Wie ich die timers.xml genau auslesen muss, wüsste ich adhoc auch noch nicht und müsste mich einarbeiten. Von daher kannst Du mir Dein Script gerne hier oder per PN schicken und ich teste das.

  • Das Script ist eigentlich fertig, aber ich bin auf einen weiteren logischen Stolperstein gestoßen:


    Was soll geschehen wenn eine Aufnahme läuft oder ein ausstehender Timer ansteht - z.B. innerhalb der nachsten sagen wir 150 Sekunden? Den reboot canceln oder wieder versuchen. Aber wann und wie oft ein retry oder gleich ein Abbruch?


    Wenn du z.B. 2x täglich rebooten willst aber jedensmal eine Aufnahme läuft oder aussteht wird der reboot jedesmal nach hinten verschoben. Dann könnte theorisch passieren dass das script 2 oder mehrmals läuft:


    worst case: der 1. cronjob wir nie beendet, weil jedesmal eine Aufnahme läuft - inzwischen startet aber bereits der nächste cronjob ...



    sauber könnte man das so lösen:


    Nur wenn keine Aufnahme läuft und in den nächsten sagen wir 150 Sekunden kein Timer startet dann rebooten.


    Wenn eine Aufnahme läuft, die Restlaufzeit errechnen (Endzeit aus der timers.xml - aktueller Zeit). Wenn die Laufzeit größer als X Stunden ist das script abbrechen - so kann man bein einer unbegrenzten Sofortaufnahme (Aufnahmezeit=24h) gleich abbrechen


    Läuft die Aufnahme noch zwischen 1 Sekunde und X Stunden die Restlaufzeit abwarten (sleep=Restlaufzeit) und dann wieder versuchen.


    Jetzt ist die Frage, ab welcher Restlaufzeit der Aufnahme sofort abgebrochen werden soll und wie oft ein reboot versucht werden soll. Man könnte auch zusätzlich einen Zahler der Gesamt Restlaufzeit einbauen, der das script abbricht, wenn eine bestimmte Restlaufzeit=delay des rebeoots überschritten werden würde. Oder einfach den reboot canceln, wenn eine Aufnahme läuft oder die timer in den nächsten x Minuten startet?



    Man könnte das auch mit frei konfigurierbaren Variaben lösen, dann kann das jeder einrichten wie man will. Aber das wird dann doch etwas komplexer

  • EMC hat übrigens auch eine Option im Setup, die die Dreambox zu einer gewünschten Zeit rebootet.
    Diese Option ist schon Uralt, keine Ahnung ob die noch sauber läuft.
    Es ist sogar möglich das vor einem Reboot nach Aufnahmen gecheckt wird, so wie es beim leeren des Papierkorb auch gemacht wird. Müsstest du mal ausprobieren oder im Code suchen. ;)

  • Wieder etwas gelernt. Ich nutze EMC schon ewig, aber das kannt ich nicht.
    Ich kenne zwar die Autostart Funktion, aber das man damit auch einen reboot auslösen kann, der Aufnahmen checkt, wusste ich nicht.


    Damit könnte man sogar den Standby (ich vermute das IDLE gemeint ist) nach dem reboot erzwingen. Also eigentlich genau dass, was __QT__ sucht ...


    Werden nur laufende Aufnahmen geprüft oder auch kurz bevorstehende Timer Aufnahmen?

  • Das mit EMC klingt gut und spannend, leider bin ich ein AMS Nutzer :tongue:


    Ich würde also nachwievor eher in Richtung Scriptvariante tendieren.


    Zum Gedanken mit der Verschiebung da eine aktive Aufnahme läuft: der geplante Reboot soll natürlich irgendwann nachts passieren. In der Regel hab ich da auch keine Aufnahmen und sollte es doch mal 1 Aufnahme geben, so würde es für meinen Anwendungsfall genügen, wenn der Reboot einfach abgebrochen und am nächsten Tag wiederholt wird. Würde mir vollkommen reichen, da mein Helferleinproblem idR erst nach x Tagen ohne Reboot auftritt und nicht jeden Tag.


    Daher wäre es ausreichend zu prüfen, ob aktive Aufnahme oder Aufnahmestart in den nächsten 150 Sekunden. Wenn ja, dann Abbruch, wenn nein, dann reboot in den Idle.


    Jetzt hab ich hier aber erstmal noch ein ganz anderes Problem. Mein Router macht seit dem major Update gestern etwas Zicken und hängt sich alle paar Stunden nach Reboot auf. Muss ich mich erstmal drum kümmern, dass die Kiste wieder stabil durchläuft.

  • Quote

    Original von __QT__


    Daher wäre es ausreichend zu prüfen, ob aktive Aufnahme oder Aufnahmestart in den nächsten 150 Sekunden. Wenn ja, dann Abbruch, wenn nein, dann reboot in den Idle.


    Das funktioniert soweit schon inkl Timercheck - soweit ich das getestet habe. Der code könnte noch etwas eleganter sein


    Die "beta" könntest du also auch schon testen. Ich müsste nur den code aufräumen und wieder etwas "abspecken.


    Ich bin schon einen einen Schritt weiter: Ich möchte das nicht script jedesmal anpassen, wenn jemand einen anderen Wunsch wie Passwort Authentifizierung (wird auch über den localhost immer abgefragt, wenn die WebIF Authentifizierung für lokale Clients aktiviert ist) oder die Anzahl der Wiederholungen anders haben will usw.


    Das kann man schön über Variablen oder oder ein config file lösen. Dann kann das jeder anpassen wie er will und muss nicht im code rumpfuschen.

  • Danke Fred, Du bist unschlagbar :)


    Was immer Du für würdig hälst, herauszugeben zum Testen, kannst Du mir gerne hier anhängen oder per PN mailen.


    Leider hab ich nachwievor Probleme hier mit dem OPNsense nach Upgrade auf die 19.1 Version am Donnerstag Abend. Muss mich erstmal drum kümmern, dass der Router wieder stabil 24x7 läuft.

  • Ein wenig dauert es noch und ich hab' erst frühestens am Abend wieder Zeit daran rumzubasteln.


    Die Grundfunktion (recording und timercheck scheint nun entgültig zu funktionieren). Die Anzahl der Versuche zu rebooten ist nun frei konfigurierbar (1 - x) und man kann einen Wert MAXWAIT konfigurieren. Wenn die Restlaufzeit einer Timer- oder Sofortaufnahme größer als MAXWAIT ist, wird das Script abgebrochen, wenn kleiner wird nach der Aufnahme noch einmal versucht zu rebooten - wenn so konfiguriert. Wenn die konfigurierte Anzahl der Versuche zu rebooten erreicht wird, wird entgültig abgebrochen



    schematisch sieht das dann etwa so aus (die Ausgaben sind etwas aufgepeppt ;) )

    Code
    root@dm7080:~# /usr/script/reboot2idle.sh --reboot
    amount of attempts to reboot: 2
    1 running recording(s) at the moment - reboot postponed
    remaining recording time: 221 seconds
    retry in 221 seconds ...
    0 running recording at the moment
    0 pending timerstart within the next 150 seconds
    execute reboot


    ist übrigens ein schönes Projekt um die scripting skills aufzufrischen
    und sorry das es noch dauert, ich bin kein Freund von halbfertigen Schnellschüssen. Ich mach mir lieber die Arbeit gleich und versuche etwaige logische und code Fehler zu vermeiden als später mühsam bugfixen


    in python könnte man sowas sicher auch umsetzen, aber da bin der falsche Ansprechpartner

  • Ein Traum Fred :danke: :thx:


    Hab nun auch eben meinen Router auf die letzte vorher funktionierende Version wiederhergestellt. Läuft erstmal wieder. Ob ich nun wieder das Upgrade auf die aktuelle wage? Ich denke, ich werde erstmal ne Weile warten und es dann nochmal testen. Hätte also Kapazität fürs "Testen" von reboot2.idle.sh, wobei es bei Deinem ausgiebigen Testen eher nur noch um die Inbetriebnahme geht :)

  • Quote

    Original von Fred Bogus Trumper
    Ich kenne zwar die Autostart Funktion, aber das man damit auch einen reboot auslösen kann, der Aufnahmen checkt, wusste ich nicht.
    Werden nur laufende Aufnahmen geprüft oder auch kurz bevorstehende Timer Aufnahmen?


    Ich vermute nur das nach laufenden oder bevorstehenden Aufnahmen gecheckt wird. Wie gesagt die Funktion ist sehr sehr alt und ich habe die nie verwendet.
    Wenn aber die selbe Routine verwendet wird wie bei automatischen löschen des Papierkorb, wird auch auf kurz bevorstehenden Aufnahmen geachtet.


    Aber wenn __QT__ kein EMC verwendet, macht das wenig Sinn. ;)
    Ich würde für mich persönlich einfach den EPG Refresh anweisen wenn er fertig ist runter zu fahren, und etwas später einen WakeUp Timer setzten. Und das Problem inkl. Aufnahme-Check wäre gelöst. ;)

  • Checkt EPG refresh ausstehende Timer und laufende Aufnahmen vor dem shutdown? Ich habe EPG refresch noch nie verwendet ...


    Wenn ja, wäre der einzige Vorteil meines reboot2idle.sh, dass ein shutdown nicht ausgeführt bzw. storniert wird, wenn der shutdown zu Weit nach hinten wegen laufender Aufnahmen oder bevorstehender Timer verschoben wird - je nachdem wie restriktiv man das im script einstellt.


    __QT__
    beta is coming soon ...

  • Quote

    Original von Fred Bogus Trumper
    Checkt EPG refresh ausstehende Timer und laufende Aufnahmen vor dem shutdown? Ich habe EPG refresch noch nie verwendet ...


    Ja das macht EPG-Refresh natürlich. Man kann auch einstellen nach welcher Zeit er erneut checken soll ob die Dreambox noch läuft, oder Timer laufen/anstehen.

  • Nun ist wieder Platz Fred! Danke für die Info. Es waren doch nur ~40 Nachrichten oder so drin. Naja, nun hab ich mal alles gelöscht und Platz gemacht :)