Autostart Script

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,
    das Thema Scripte ist zwar schon oft behandelt worden, aber ich blicke noch nicht durch.....

    Eigentlich geht es darum, das meine Raspi im Keller nach einem Stromausfall automatisch das Programm "heizung" in einem Terminalfenster startet.
    Zum Testen nehme ich natürlich erstmal eine andere Raspi mit dem Programm "hallo_welt".

    Ich denke das das Starten durch die rc.local der richtige Zeitpunkt ist.

    Die rc.local sieht bei mir folgender maßen aus:

    Jetzt brauche ich nur zwischen "fi" und "exit 0" die Zeile "./hallo_welt" eingeben und abspeichern?

    Wie teste ich das, ohne das mir die Raspi bei einem Fehler abstürzt? Einfach die rc.local ausführen und gucken ob "hallo_welt" abläuft?

  • Hallo hunter_Spike,


    Jetzt brauche ich nur zwischen "fi" und "exit 0" die Zeile "./hallo_welt" eingeben und abspeichern?


    Bitte nur mit absolutem Pfad.


    Wie teste ich das, ohne das mir die Raspi bei einem Fehler abstürzt? Einfach die rc.local ausführen und gucken ob "hallo_welt" abläuft?

    Code
    sudo reboot

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Ich vermute das das Terminalfenster nicht geöffnet wird....


    Richtig. Erstelle statt der Ausgabe einfach einen journal-eintrag

    Einmal editiert, zuletzt von WinterUnit16246 (15. Juni 2017 um 13:20)

  • Hallo hunter_spike,

    Braucht Dein Skript X11?

    Wenn ja, dann musst Du Dein Skript verzögert und im Hintergrund starten:


    Hmmm....
    keine Änderung zu vorher.
    Ich vermute das das Terminalfenster nicht geöffnet wird....

    Code
    (sleep 30 && /pfad/zu/deinem/skript) &


    Das startet einen Hintergrundprozess, bestehend aus 30 Sekunden warten und danach Start Deines Skripts.

    Oder rufe LXterminal auf, das Dein Skript startet.

    Oder gebe mehr Infos, was Dein Skript voraussetzt und an vorhandenen Ressourcen erwartet, um laufen zu können.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    3 Mal editiert, zuletzt von Andreas (18. Oktober 2017 um 19:58)

  • Was ist denn X11???

    Ich hab jetzt mal zwischen "fi" und "exit 0"

    /usr/share/raspi-ui-overrides/applications/LXTerminal

    eingegeben um das Terminal beim booten zu starten.
    Geht aber nicht.
    Automatisch zusammengefügt:
    Ähhh....
    Ich hab doch gar kein Skript....
    Ich möchte das Programm "hallo_welt" im LXTerminal ausführen.
    Dafür rufe ich das Programm in der rc.local auf.

    .... so war zumindest der Plan....

    Einmal editiert, zuletzt von hunter_spike (15. Juni 2017 um 13:49)

  • FAQ => Nützliche Links / Linksammlung => Autostart


    Unter " X11 " versteht man allgemein die GUI von Linux, also die grafische Oberfläche, der Desktop ... Da wo man mit der Maus rum klicken kann... Windows-mäßig...

    Wenn dein Script eine GUI darstellt kann es davon abhängig sein - sprich, es kann erst dann gestartet werden wenn X11 bereits läuft. /etc/rc.local wird aber viel früher ausgeführt.

  • Unter " X11 " versteht man allgemein die GUI von Linux, also die grafische Oberfläche, der Desktop ... Da wo man mit der Maus rum klicken kann... Windows-mäßig...

    Das ist mal eine Erklärung die ich verstanden hab!!! :D :D :D :bravo2: :bravo2: :bravo2: :danke_ATDE:
    Automatisch zusammengefügt:

    In meinem Fall also:

    Code
    .......
    fi
    
    
    (sleep 30 && /usr/share/raspi-ui-overrides/applications/LXTerminal) & /home/pi/hallo_welt
    
    
    exit 0

    ???

    Ich frag lieber nach bevor ich probiere. Hab keine Lust die Raspi schon wieder neu zu installieren.

    Einmal editiert, zuletzt von hunter_spike (15. Juni 2017 um 16:15)

  • Hallo hunter_spike,

    Code
    man lxterminal


    verrät Dir, wie Du weitere Programme im Terminal aufrufen kannst. Dein HalloWelt wird LXTerminal übergeben und nicht separat gestartet. Bei Deiner Version startest Du Dein Programm, ohne dass es an ein Termi als Ausgabemöglichkeit gebunden wäre.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (15. Juni 2017 um 18:12)

  • Meine rc.local sieht jetzt so aus:

    Wenn ich einen Doppelklick auf die rc.local mache und klicke auf "Ausführen", da wird nach 20 Sekunden ein Terminalfenster geöffnet in dem "hallo_Welt" steht. So weit alles in Ordnung.
    Wenn ich aber die Raspi herunterfahre und neu starte erscheint dieses Fenster nicht.
    Ich vermute mal, das die rc.local beim booten nicht ausgeführt wird.

    Wenn ich mir mit "ls" die Rechte ansehen will, dann wird mir:

    Code
    pi@raspberrypi:~ $ ls -l /etc/rc.local
    
    
    -rwxr-xr-x 1 root root 486 Jun 16 10:01 /etc/rc.local


    angezeigt.
    Ich würde sagen das ist so in Ordnung.

    Was muss ich anders einstellen oder wo kann ich nachsehen, das die rc.local ausgeführt wird?

  • Hallo hunter_spike,

    Füge hinter die Kommentarzeilen von /etc/rc.local mal Folgendes ein:

    Code
    exec 2> /tmp/rc.local.log  # send stderr from rc.local to a log file
    exec 1>&2                      # send stdout to the same log file
    set -x                         # tell sh to display commands before execution


    Dadurch wird eine Log-Datei angelegt und die Kommandos in rc.local vor deren Ausführung als Text ausgegeben. Dann weißt Du, ob /etc/rc.local beim Booten ausgeführt wird. Es wäre aber ein starkes Stück, wenn das nicht der Fall wäre!

    Was mich wundert, warum root beim Booten auf deine Datei, die Deinem User pi gehört, beim Booten ausführenden Zugrif haben sollte.

    Wenn erst ein Doppelklick zur Ausführung führt, dann ..., na, dann ist das System vollständig hochgefahren. Dies scheint bei Deinem aktuellen Start von /etc/rc.local nicht der Fall zu sein. Du schläfst nur 20 Sekunden - die Frage ist, ob diese Zeit reicht. Mein Vorschlag vorhin bestand in 30 Sekunden schlafen - in der Hoffnung, dass das System so weit wach geworden ist.


    Dann machst Du einen Reboot und postest die Ausgabe von

    Code
    cat /tmp/rc.local.log

    Dann wissen wir mehr, was auf Deinem RPi passiert.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (19. Juni 2017 um 15:50)


  • Wenn ich einen Doppelklick auf die rc.local mache und klicke auf "Ausführen", da wird nach 20 Sekunden ein Terminalfenster geöffnet in dem "hallo_Welt" steht. So weit alles in Ordnung.
    Wenn ich aber die Raspi herunterfahre und neu starte erscheint dieses Fenster nicht.
    Ich vermute mal, das die rc.local beim booten nicht ausgeführt wird.

    Ich wiederhole das noch mal:


    Wenn dein Script eine GUI darstellt kann es davon abhängig sein - sprich, es kann erst dann gestartet werden wenn X11 bereits läuft. /etc/rc.local wird aber viel früher ausgeführt.

    Da du erwartest dass das Fenster auf deinem Desktop erscheint musst du einen anderen Autostart-Weg wählen!

    Für dich kommt /etc/rc.local nicht in frage!

  • Ich vermute mal, jetzt sollte ich ganz kleinlaut werden und meigrafd Recht geben. :blush: :blush: :danke_ATDE:

    Dann wäre für mich die rcX.d die richtige Wahl?
    Automatisch zusammengefügt:
    Auf der Seite:
    https://raspberry.tips/raspberrypi-ei…men-einrichten/

    hab ich das gelesen:

    Code
    Die in /etc/rc.local hinterlegten “Autostarts” werden am Ende des Startvorganges eures Raspberry Pi ausgeführt

    Das hörte sich erst mal für mich passend an....

    Einmal editiert, zuletzt von hunter_spike (19. Juni 2017 um 17:10)

  • Hallo hunter_spike,


    Ich vermute mal, jetzt sollte ich ganz kleinlaut werden und meigrafd Recht geben. :blush: :blush: :danke_ATDE:


    Jetzt weißt DU, was anderen schon klar war, dass LXTerminal eine X11-Umgebung benötigt. Was mir allerdings noch nicht klar ist, warum Dein einfaches HalloWelt-Programm dies auch benötigen sollte.

    Deswegen würde ich Dir empfehlen, mal den Aufruf von lxterminal innerhalb von /etc/rc.local zu entfernen. Ansonsten wäre es ein guter Zeitpunkt, Deinen Code mal zu posten.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (19. Juni 2017 um 17:13)

  • Sein Programm benötigt es nicht direkt - er führt es über "lxterminal" aus aber Das benötigt X11.

    Auch rcX.d ist der falsche Weg. Bitte ließ dir die anderen Möglichkeiten aus Beitrag#8 durch (bzw der Link dort).
    Hint: X11 = Desktop.

    "am Ende des Bootvorgangs" bezieht sich auf den Bootvorgang, nicht auf das Starten irgendwelcher Programme. X11 ist auch nur ein Programm was erst im Anschluss des Bootvorgangs gestartet wird.
    Entweder du nutzt einen Autostart der von X11 geboten wird, oder du musst zum Beispiel systemd verwenden um gewisse Abhängigkeiten zu erstellen, so von wegen "mein Programm soll erst dann gestartet werden wenn XYZ verfügbar ist". Für deinen Fall reicht aber absolut den Autostart von X11 zu nutzen - bzw LXDE ....


    //EDIT: Oder im IRC idlen @ linusg ;) Da werden neue Beiträge in nahezu Echtzeit announced :daumendreh2:

  • Der Satz, den du zitiert hast, stimmt schon. Der Pi ist "fertig mit booten" wenn er beim Login bzw. Prompt angekommen ist. Dann hat er rc.local auch schon ausgeführt. Ob du nun noch einen Autologin mit anschließendem startx o.ä. machst, ist etwas anderes, du startest nur ein (eig. mehrere) Programme nach dem Bootvorgang.

    Was genau macht den Hello world bei dir? Wenn du keine GUI programmiert hast, brauchst du weder X11 noch ein DE. Mal davon abgesehen, dass es auch GUIs gibt, die ohne X11 laufen (z.B. mit Framebuffer, pygame kann das), braucht das klassische Python Hello World nur eine Shell:

    Code
    print('Hello World')

    LG

    Edit: Ich sollte mal schneller tippen ;)


  • ..... Ansonsten wäre es ein guter Zeitpunkt, Deinen Code mal zu posten.


    Beste Grüße

    Andreas

    Den Code von "hallo_Welt"???

    Hab das ja nur genommen, um den Autostart beim booten zu testen.
    Mein Programm "Heizung", das eigentlich gestartet werden soll, hat noch ein paar includes von wiringPi.h und math.h dabei.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!