Python im Bootvorgang

  • Hallo,


    da sich die 7025 beim Booten regelmäßig aufhängt, würde ich gerne in den Bootvorgang ein eigenes Skript einbauen, dass die Korrektheit des Bootvorgangs überprüft. (Es soll fünf Minuten warten und dann die Prozessliste auswerten)


    Da die Box immer nur beim ersten Booten hängt, dann aber bei zweiten Versuch immer durchstartet, würde ich für den Fall eines Hängers mir einen Merker setzen und die Box Neustarten. Würde beim nächsten Start wieder ein Hänger festgestellt, würde ich die Box komplett herunterfahren. Läuft sie wie erwartet hoch, lösche ich den Marker.


    Das mache ich z.Zt immer manuell per Telnet und es sollte daher auch automatisierbar sein.


    Dazu zwei Fragen.


    - Wie/Wo kann ich in den Bootvorgang den Start eines eigenen Python-Skriptes einbauen?


    - Kann ich über Python das System zu einem Neustart oder Herunterfahren zwingen?

    Einmal editiert, zuletzt von almoss ()

  • link des scripts bootprobleme.py (oder .sh) das du auf auf /etc/init.d wo die startupscript liegen anlegst (ich würde aber ein shell script nehmen - siehe unten) mit S99bootprobleme im directory /etc/rc3.d anlegen dann wird es beim starten als letztes ausgeführt


    code müßte ungefähr so aussehen:


    #!/bin/sh
    sleep 60
    if [ 'ps ax | grep enigma2 | wc -l' -lt 4 ]; then
    if [ ! -f /etc/init.d/bootproblem ]; then
    touch /etc/init.d/bootproblem
    shutdown -r now
    fi
    else
    rm /etc/init.d/bootproblem
    fi
    exit 0


    script zählt 60 sec nach dem booten ob alle enigma2 prozesse laufen
    und wenn nicht legt es problemfile an und rebootet (wenn enigma eh nicht läuft ist auch keiner sauberer shutdown nötig und shutdown -r now reicht völlig)


    Gruss
    thowi

    3 Mal editiert, zuletzt von thowi ()

  • Zitat

    link des scripts bootprobleme.py (oder .sh) das du auf auf /etc/init.d wo die startupscript liegen anlegst (ich würde aber ein shell script nehmen - siehe unten) mit S99bootprobleme im directory /etc/rc3.d anlegen dann wird es beim starten als letztes ausgeführt



    Danke für das Skript.


    Den obigen Satz verstehe ich leider noch nicht ganz.


    Ich habe das Skript als bootprobleme.sh in das Verzeichnis /etc/init.d kopiert. Danach habe ich es auf ausführbar gesetzt.


    Wenn ich es manuell starte, bekomme ich diese Fehlermeldung


    Das scheint ein Syntaxproblem zu sein,
    denn per Telnet kann ich sowohl den Sleep Befehl
    (z.B Sleep 60s) als auch den (ps ax | grep enigma2 | wc -l)
    eingeben:


    Dann hab ich noch eine Frage zur Verknüpfung


    In /etc/rc3.d liegen bei mir 5 links:
    S10dropbear
    S20inetd
    S20syslog
    S20vsftpd
    S99rmnologin


    Mein FTP-Client zeigt die als verknüpfte Directorys an - reingucken kann ich nicht.


    Muss ich da eine Verknüpfung auf bootprobleme.sh anlegen?
    Wenn ja, wie macht man sowas?

    5 Mal editiert, zuletzt von almoss ()

  • ich habe nur schnell die befehle aus dem Gedächnis reingekloppft. Das script sauber zu machen musst du selber - einfach mit sh -x bootprobleme.sh ausführen dann kannst Du es debuggen :winking_face:


    scheinbar sind die 60 mit 0 als buchstaben statt als Zahl, probier einfach mal 59 oder tipps im joe editor ordentlich ein :winking_face:


    Wahrscheinlich hast du es auch als DOS file cut & paste gemacht - fürh mal ein dos2unix bootprobleme.sh aus um es aufs unix fileformat zu konvertieren.


    Mit cat /rc3.d/S* kannst Du dir die files schon ausehen weil dann wird dem Link gefolgt.


    Zum Linken des scripts:


    cd /etc/rc3.d
    ln -sf /etc/init.d/bootprobleme.sh S99bootprobleme
    cat S99bootprobleme


    der letzte Befehl sollte dann wieder den scriptinhalt anzeigen.


    Aber zuerst mal das script debuggen - wie gesagt habe ich Dir ja nur Befehle gezeigt wie man die enigmaprozesse zählen kann (und wenn es nach 1 min zuwenig sind dann gab es eben Bootprobleme)


    Und mit den if/then/else musst du dann so wie du möchstest eben die logik bauen das du ein file schreibst wo man sich merkt das es schon ein reboot mit bootproblemen ist (das touch zum fileanlegen reicht) und dsan eben entsprechend shutdown -r now machen.


    Ich dachte das wenn du nach python fragst (dafür ist es im Bootvorgang nur eben eigentlich zu früh - wobei man natürlich auch python scripte schreiben kann so wie das shell script) du dich eh mit proggenb auskennst und mit den tipps weiterkommst - ich kann dir schon ein fertiges script produzieren, aber dann lernst Du nichts dabei - und müßtest bis heute abend warten :winking_face:


    Gruss
    thowi

    Einmal editiert, zuletzt von thowi ()

  • Zitat

    Wahrscheinlich hast du es auch als DOS file cut & paste gemacht - fürh mal ein dos2unix bootprobleme.sh aus um es aufs unix fileformat zu konvertieren.


    Das hat schon mal geholfen. Das Skript startet jetzt.
    Da hätte ich eigentlich auch von selbst drauf kommen können...


    Zitat

    Ich dachte das wenn du nach python fragst (dafür ist es im Bootvorgang nur eben eigentlich zu früh - wobei man natürlich auch python scripte schreiben kann so wie das shell script)


    Das war eher so ein Griff nach dem letzten Strohhalm. Ich hab ja seit Monaten das Problem, dass sich die Box beim booten ständig weghängt und da der Fehler im Image auch im neuesten Dreamville noch drin ist, muss halt etwas Pfusch her, der das Problem von "kritisch" auf "lästig" reduziert.


    Zitat

    du dich eh mit proggenb auskennst und mit den tipps weiterkommst


    Ich kann in der Dos-Welt ziemlich gut programmieren - bei Linux fehlt mir ein wenig das Wissen, wie man an solche Probleme herangeht. Und Phyton wollte ich sowieso lernen.


    Das scheint jetzt aber zu klappen. Dann warte ich jetzt mal auf den nächsten echten Hänger und schau, ob die Box dann neu durchstartet...


    Bis dahin vielen Dank für die Hilfe.

  • wenn ich helfen konnte.


    Shell script programmierung ist aber eigentlich recht ienfach (gerade wenn man so wie ich nur die standard system V shell verwendet).


    Schließlich ist der Befehlssatz fast so alt wie ich :winking_face:


    Mit googeln findest du genug seiten wo die Befehle und Verwendung
    aufgelistet sind, und Beispiele gibts auch genug.


    Python ist zwar nett, aber hat eine andere, modernere Programmierlogik.


    Aber grade auf Betriebsystemebene kann man schon ziemlich viel machen mit shell scripts (multiboot ist z.B. ein Shell script mit 4000 Zeilen code mit nur einem kleinen python wrapper mit 1000 codezeilen)


    Hauptsache die box bootet jetzt ordentlich (wenn auch im 2. Anlauf).


    Wenn aber ein reiner reboot hilft würde ich evt. auch erstmals im script probieren enigma neuzustarten - init 2 und dann init 3 und nach 30 sec wieder schauen ob alle prozesse (noch) laufen.


    Ich würde auch trotzdem mal ins bootlog schauen was bei den 2 bootvorgängen anders ist, es kann nicht sein das es grundlos 1x geht und 1x nicht.


    Ich habe eigentlich noch nie das Problem gehabt das die box grundlos (!) nicht zuende gebotet hat und durch die Multiboot entwicklung teste ich eigentlich alle images in unterschiedlichsten varianten durch.


    Gruss
    thowi

  • Ich hab das heute morgen mal an einem echten Hänger
    testen können und musste am Skript noch was anpassen (Hochkommata :smiling_face: ).
    Es sieht jetzt so aus



    Ich hab dem Bootvorgang per Telnet zugesehen - das Log folgt unten.
    Im Augenblick wird die Box immer 2x gestartet. Denn Enigma2 erscheint innerhalb der 60 Sekunden Wartezeit nicht in der Prozessliste.


    Kann ich das Problem angehen, indem ich die Wartezeit erhöhe, oder ist die Startreihenfolge falsch und Enigma2 wird erst nach meiner Prüfung gestartet?


    In /etc/rc3.d liegen bei mir jetzt 6 links:
    S10dropbear
    S20inetd
    S20syslog
    S20vsftpd
    S99bootprobleme
    S99rmnologin



    Hier habe ich während des Bootvorgangs immer wieder "ps" getippt.

    Einmal editiert, zuletzt von almoss ()

  • Wenn das Skript einfach in init.d aufgerufen wird, wartet die Box offensichtlich auf das Skriptende und bootet erst dann weiter. Während des Wartens gibt es natürlich null Enigma2-Prozesse, so daß das immer als Bootproblem interpretiert wird. In Anlehnung an das Skript von thowi, den schon vorhandenen init.d-Skripten und eigenen Linux-Kenntnissen aus dem letzten Jahrtausend hier eine Version, die funktionieren sollte. Außerdem sagt sie, was sie gerade macht und man sieht im Bootlog die entsprechenden Meldungen:



    Praktisch bewährt hat sich das Skript noch nicht, meine Box will mich wieder mal ärgern und bootet jetzt immer richtig. Ein guter Ablageort für die Datei dürfte irgendwo unter /media/hdd sein, dann braucht man beim Einspielen eines neuen Images nur noch den Link neu zu erstellen.


    Übrigens mußte ich das Skript erst mit


    chmod 777 boottest.sh


    ausführbar machen.



    HeiRos

    Einmal editiert, zuletzt von HeiRos ()

  • Zitat

    Praktisch bewährt hat sich das Skript noch nicht, meine Box will mich wieder mal ärgern und bootet jetzt immer richtig. Ein guter Ablageort für die Datei dürfte irgendwo unter /media/hdd sein, dann braucht man beim Einspielen eines neuen Images nur noch den Link neu zu erstellen.


    Ich hab das Script jetzt unter dem Namen "bootprobleme.sh" in /etc/init.d abgelegt und damit das andere Skript ersetzt.


    Wenn ich es per Hand starte, muss ich den Parameter"start" manuell übergeben. Sehe ich das richtig, dass der beim Booten dann auch übergeben wird?


    Naja, ob's im Ernstfall klappt, werde ich spätestens in ein paar Tagen wissen.

  • Zitat

    Original von almoss
    Wenn ich es per Hand starte, muss ich den Parameter"start" manuell übergeben.


    Ja, andernfalls beschwert es sich über einen fehlerhaften Aufruf. Um das Booten zu testen, kannst Du vorher


    init 2


    aufrufen, das beendet alle enigma2-Prozesse und beim nachfolgenden


    ./bootprobleme.sh start


    sollte die Box nach 60 Sekunden neu starten.


    Zitat

    Sehe ich das richtig, dass der beim Booten dann auch übergeben wird?


    Ja, das serielle Bootlog zeigt mir beim korrekten Start der Box


    Code
    BOOTTEST_V_0.1: Aufruf von Skript /etc/rc3.d/S99boottest mit Parameter start
    BOOTTEST_V_0.1: Restart von /etc/rc3.d/S99boottest im Hintergrund
    BOOTTEST_V_0.1: Aufruf von Skript /etc/rc3.d/S99boottest mit Parameter teste
    BOOTTEST_V_0.1: Warte 60s auf Start der Enigma2-Prozesse


    an, der Bootvorgang geht ganz normal weiter und später kommt dann


    Code
    BOOTTEST_V_0.1: Start scheinbar normal
    BOOTTEST_V_0.1: Boottest beendet


    Unter welchen Bedingungen das Skript vom System mit restart aufgerufen wird, weiß ich nicht. Dazu müßte sich jemand äußern, der mehr Ahnung von Linux hat.


    HeiRos

  • Zitat

    na schön wenn wir helfen konnten, aber ich würde trotzdem weitersuchen warum das booten nicht flutscht, weil normal ist das nicht ...


    Da hast du recht. Wenn ich bei der Suche nach dem Problem mithelfen kann, mach ich das gerne. Mir fehlt aber die Möglichkeit, Bootvorgänge über den seriellen Anschluss zu loggen, da mein Laptop keinen seriellen Anschluss hat...


    Im "Bug" Thread (hier) hat Ghost geschrieben, dass der Fehler bereits bekannt ist - vermutlich wird der in einigen Monaten dann auch gefixt werden.


    Jedenfalls bin ich so erstmal zufrieden und traue mich dann wieder, die Box trotz programmierten Timern abzuschalten. Jetzt muss ich nur noch herausfinden, wie ich die 7025 dazu bekomme, nach dem Booten immer die ARD (Position 1 der Favoritenliste) einzuschalten, um sich vor dort eine korrekte Uhrzeit zu holen. Ab dann sollten alle meine Timer einwandfrei durchlaufen.

  • schreib einfach ein boot script das mit meinem control binary - entsprechende threads sind im E2 Plugin Teil des Forums den enstpryechendne Kanal anwählt, dann wird das auch mit ARD.


    Musst aber auch mit & und einem sleep einplanen damit e2 komplett gestartet ist sonst geht der gesendete FB code ins leere.


    Gruss
    thowi


    PS: oder du schaust die mal die notaufname an die ändert einfach den letzten sender sein serviceref im config file um zu zappen, das kann man auch verwenden um immer nach dem boot ARD zu haben, weil sonst ist es der sender mit dem du runtergefahren bist.

  • Zitat

    schreib einfach ein boot script das mit meinem control binary - entsprechende threads sind im E2 Plugin Teil des Forums den enstpryechendne Kanal anwählt, dann wird das auch mit ARD.


    Hmm, wenn Enigma2 mit einem anderen Kanal schon gestartet ist,
    ist es zu spät - dann ist die falsche Uhrzeit aktiv und wird auch nicht
    mehr geändert, bis ich frisch boote.


    Das Problem tritt nur dann auf, wenn ich als letzten Sender einen eingeschaltet hatte,
    der totalen Blödsinn als Uhrzeit sendet.
    Betroffen sind die Feedkanäle, auf denen die Zuspielungen für
    die US-Late-Night-Talkshows von David Letterman und Jay Leno laufen
    und der Pentagon-Channel auf 13° Ost Hotbird.


    Zitat


    PS: oder du schaust die mal die notaufname an die ändert einfach den letzten sender sein serviceref im config file um zu zappen, das kann man auch verwenden um immer nach dem boot ARD zu haben, weil sonst ist es der sender mit dem du runtergefahren bist.


    Das werde ich mir mal ansehen, danke.

    Einmal editiert, zuletzt von almoss ()

  • Zitat

    Original von almoss
    Jetzt muss ich nur noch herausfinden, wie ich die 7025 dazu bekomme, nach dem Booten immer die ARD (Position 1 der Favoritenliste) einzuschalten, um sich vor dort eine korrekte Uhrzeit zu holen.


    Nimm doch ein Skript :grinning_squinting_face:


    1) Auf ARD wechseln und Box neu starten, sie sollte dann ARD anzeigen.


    2) Ohne den Sender zu wechseln per Telnet mit der Box verbinden und folgendes eingeben


    cd /etc/enigma2
    cp config config.ard


    Damit erstellst Du eine Kopie der aktuellen E2-Konfiguration, die u. a. den eingestellten Sender enthält.


    3) Folgendes Skript erstellen:



    und abspeichern, bei mir unter /media/hdd/ablage/Firmwareerweiterungen/startard.sh


    4) Skript mit


    chmod 777 /media/hdd/ablage/Firmwareerweiterungen/startard.sh


    ausführbar machen.


    5) Einen Link im Startverzeichnis erstellen


    cd /etc/rc3.d
    ln -sf /media/hdd/ablage/Firmwareerweiterungen/startard.sh S01startard
    cat S01startard


    Der letzte Befehl muß das Skript anzeigen.


    6) Einen anderen Sender einstellen und die Box neu starten. Jetzt müßte sie trotz des anderen Senders wieder mit ARD starten.


    HeiRos

  • Das vorhergehnde Skript funktioniert vom Prinzip her, trotzdem hier eine verbesserte Fassung, die zusätzlich auf die Existenz der entsprechenden Dateien prüft:



    HeiRos

  • Zitat

    Das vorhergehnde Skript funktioniert vom Prinzip her, trotzdem hier eine verbesserte Fassung, die zusätzlich auf die Existenz der entsprechenden Dateien prüft:


    Klappt prima, danke.

  • Hoffentlich liest hier noch jemand mit, der Thread ist doch schon leicht angestaubt. :winking_face:


    Auf meiner Box läuft jetzt auch ein neueres Image, das die Konfiguration in der Datei settings abspeichert, was dem ARD-Skript natürlich nicht gefällt. Hier die Anleitung für aktuelle Image, die Schritte entsprechen weitestgehend der alten Version:


    1) Auf ARD wechseln und Box neu starten, sie sollte dann ARD anzeigen.


    2) Ohne den Sender zu wechseln per Telnet mit der Box verbinden und folgendes eingeben


    cd /etc/enigma2
    cp settings settings.ard


    Damit erstellst Du eine Kopie der aktuellen E2-Konfiguration, die u. a. den eingestellten Sender enthält.


    3) Folgendes Skript erstellen:



    und abspeichern, bei mir unter /media/hdd/ablage/Firmwareerweiterungen/startard.sh


    Der Rest ist wie bei der alten Version.


    Gruß HeiRos