Autostart eines Python Script

L I V E Stammtisch ab 20:30 Uhr im Chat
    • Offizieller Beitrag

    Hier ein kurzes Tutorial, wie man ein Python Script automatisch nach dem Hochfahren starten lässt.

    Schritt 1:
    Beispielscript mit Python Shebang

    Code
    #!/usr/bin/env python
    
    
    while True:
      print "test"


    Da dieses Script per Shebang mit Python interpretiert wird benötigen wir dazu noch Dateirechte

    Schritt 2:
    Nun müssen die Rechte so gesetzt werden, dass es ausführbar ist

    Code
    sudo chmod +x /home/pi/test.py

    Schirtt 3:
    Als nächstes tragen wir den Pfad des Scripts in die rc.local ein.

    Code
    sudo nano /etc/rc.local


    Vor "exit 0" fügt ihr den Pfand zu eurem Script(s) ein.
    Das & bewirkt, dass die rc.local weiter abgearbeitet und nicht darauf gewartet wird, dass das Script fertig ist. Bei einem Script mit Endlosschleife würde sonst ewig gewartet werden und der Pi bleibt beim Starten hängen.

    Code
    /home/pi/test.py &
    exit 0


    Wenn ihr aus irgendwelchen Gründen möchtet, dass das Script mit einer Verzögerung ausgeführt wird könnt ihr diesen Befehl nutzten.

    Code
    /bin/sleep 15  && /home/pi/test.py &


    Die Sekunden (hier 15) könnt ihr anpassen


    Abspeichern nicht vergessen.


    Schritt 4:
    Nun könnt ihr einen Neustart machen und überprüfen ob das Script ausgeführt wurde

    Code
    sudo reboot

    Zum überprüfen geben wir diesen Befehl ein:

    Code
    ps -ef | grep python

    Ihr solltet in etwa diese Ausgabe bekommen

    Zitat


    pi@raspberrypi ps -ef | grep python
    root 2055 1 10 13:47 ? 00:00:01 python /home/pi/test.py


    Damit ist bestätigt, das das Script ausgeführt wurde.

    Das wars.


    Schöne Grüße,
    ps915

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

    Einmal editiert, zuletzt von ps915 (8. März 2014 um 17:29)

  • Mh, ich habe mein kleines Shutdown Script einfach mit

    Code
    python /home/pie/shutdown.py &


    in die rc.local eingefügt.

    Ich habe von Linux allerdings auch herzlich wenig Ahnung. Ist dieser Weg irgendwie schlechter, oder gibt es gravierende Nachteile? Das Thema Autostart finde ich als Frischling generell spannend, darum danke für das Tutorial und die eventuelle Aufklärung.

  • Aus meiner Sicht wäre es besser solche sachen über die crontab zu regeln

    Falls "nano" dein bevorzugter Editor unter Linux ist, machst du einmalig: export EDITOR=nano
    Ansonsten würde folgendes standardmässig mit vi geöffnet:

    Code
    crontab -e

    zum bearbeiten der Benutzer-crontab

    Dort trägt man dann das ein:

    Code
    @reboot    /home/pie/shutdown.py


    ..würde das Script nach Systemstart ausführen


    Warum aber gleich nach Systemstart wieder ein shutdown gemacht werden soll, ist irgendwie komisch :)

  • Es scheint verwirrend viele Möglichkeiten zu geben, unter Linux etwas automatisch starten zu lassen :denker:

    Zitat


    Warum aber gleich nach Systemstart wieder ein shutdown gemacht werden soll, ist irgendwie komisch :)


    Bei meinem ersten Versuch war es tatsächlich das, worauf ich erstmal ein neues Image aufspielen durfte. Keine Ahnung, und so ;) Ein kleines "Scriptchen", welches einen GPIO Pin abfragt und dann einen shutdown ausführt, sowie eine LED als Betriebs- und Bestätigungsmelder ansteuert.

  • Ich habe nach Anleitung von Martin Kompf 1-wire Temp-Sensoren an meinen raspberry angeschlossen. Graphen usw. funktionieren super. Einziges Problem ist crontab in die "Autostart" zu bekommen.

    Code
    sudo nano /etc/rc.local



    und da dann vor exit0


    Code
    echo '*/5 * * * * $HOME/temperature/gettemp.s >> $HOME/temperature/gettemp.log 2>&1' | crontab -

    rein schreiben?
    Lieg ich da richtig?

    Einmal editiert, zuletzt von golfer76 (23. November 2013 um 14:31)

  • Hallo,
    Ich bin kurz vor dem Verzweifeln.

    Ich bin gerade dabei meine ersten kleine Scripte in Python für meinen Raspberry zu schreiben.

    Das erste Script fragt einfach nur einen GIPO ab ob dieser nach Masse gezogen wird. Ist das der Fall, dann fährt der Raspberry runter.

    Das 2. Script ist ein wenig (aber wirklich nur ein wenig) komplexer.
    Das Script zeigt zum Programm-Start ein Start-Screen auf dem dem Bediner Anweisungen gegeben werden was er zu tun hat.
    Daraufhin wartet das Programm solange bis eine weitere Taste gedrückt wird und zieht daraufhin DIV GPIOs in einer bestimmten Reihenfolge und es werden zwischendurch div Bilder eingeblendet.

    Auch dieses Script läuft super.

    Aber ich möchte gerne das beide Scripte beim Booten des Raspberrys gestartet werden.
    Sobald ich aber an dem Punkt komme, das ein Bild geladen wird, stürzt mein Programm ab.
    Ohne Bilder läuft alles.

    Ich habe schon diverses ausprobiert.

    Erst bin ich über /etc/crontab -e gegangen, funktionierte aber nicht
    Dann über /etc/xdg/autostart/autostartet.desktop und auch über den Weg mit der /etc/rc.local.

    Aber alles hat nicht funktioniert.

    Wenn ich die Beiträge bisher richtig gelesen habe liegt es daran, das mein Script die grafische Oberfläche benutzt, aber ich weis es leider nicht.

    Kann mir einer helfen?

    Gruß
    Frank

  • Hey,

    ich hab ein ähnliches Problem. Also ich habs auch versucht in die rc.local ein zu tragen aber es schlug alles Fehl. Also es passierte überhaupt nichts.

    ich habe folgende Zeile angefügt vor exit 0:

    nohup ./memwatch.sh &

    oder auch

    ./memwatch.sh &

    nur beides funktioniert nicht. Also das Programm ermittelt den aktuellen Zustand des RAM Speichers mittels LEDs unter anderem aus zu geben. Aber leider tat sich da nichts automatisch beim Neustart. Also LEDs blieben aus und so.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:


  • ...
    nohup ./memwatch.sh &
    ...
    ./memwatch.sh &
    ...

    Hallo Michael,

    da der rc.local als root ausgeführt wird, kann das nicht gehen ...
    Gib mal den gesamten Pfad an, also /home/pi/scripte/... als Beispiel.
    Evtl. musst Du sogar bash /home/... eintragen. Dein Vorschreiber musste das bei einem Python script auch tun.

    cu,
    -ds-

  • So ich habe es nun versucht, wie du es beschrieben hast.

    Also ich habe,

    - den "Kompletten" Pfad angegeben -> hat nicht geklappt
    - den Pfad & bash davor eingegeben -> hat nicht geklappt


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

  • Kannst du mal bitte genau angeben Wo sich dein Script befindet, ob du dem Script Rechte (ausführ-Rechte) gegeben hast und auch was in dem Script genau drin steht (Vorhandensein eines Shebangs wäre hierbei wichtig), und auch genau posten Wie du es bisher versucht hast einzutragen (den genauen Eintrag, nicht eine Beschreibung dessen) :huh:
    ...Sonst geht das Rätselraten immer weiter...

    Wichtig wäre auch wie du /etc/rc.local bearbeitet hast

    haben hier schon einiges erlebt was nicht "normal" ist, Problem war aber immer der Typ vorm Rechner denn der Autostart wie er hier beschrieben wurde funktioniert 100% also wieso nur nicht bei dir? -> weil du irgendwas anders gemacht hast... Nur was ist die Preisfrage
    (dazu gehört auch in /etc/rc.local ein Eintrag setzen zu wollen der eigentlich in die Crontab gehört)


    PS: Bitte gewöhnt euch an eure Probleme nicht in den Tutorial Threads zu posten sondern eigene Threads zu erstellen - wenn das jeder machen würde, wären die Tutorial Threads irgendwann verdammt unübersichtlich und elendig lang Danke!

  • Okay,

    ich habe meinen Code aus "Speicheranzeige des RAM Speichers mittels LED - Speicherampel" genommen. Der liegt in /home/pi/scripte/shell und heißt memwatch.sh. Wenn ich das Skript manuell starte klappt alles wie es soll. Von daher sollte das theoretisch nicht das Problem sein. Die Rechte habe ich auf 700 gesetzt, Eigentümer ist pi.

    Die rc.local habe ich mit dem mcedit Editor editiert wie oben beschrieben.

    Hab erst /home/pi/scripte/shell/memwatch.sh & ans Ende vor Exit 0 eingetragen, dann neu gestartet und es tat sich nix. Also LED bleibt aus. Danach habe ich das bash noch davor gestellt und es passiert auch nichts.

    Ich hoffe es sind alle notwendigen Infos nun drin.

    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

    • Offizieller Beitrag

    Wenn man die Datei NICHT ausführbar gemacht hat (chmod +x) und keine Shebang (#!/usr/bin/python) in der ersten Zeile hat, muss muss man auch mit kompletten Pfaden in der rc.local arbeiten. Ich bin mir ziemlich sicher das meigrafd das hier mal mal irgendwo sehr gut erklärt hat inkl. unzähliger Beispiele.

  • Ich bin mir ziemlich sicher das meigrafd das hier mal mal irgendwo sehr gut erklärt hat inkl. unzähliger Beispiele.

    Forumsuche nach: crontab
    Oder nach: Autostart
    ;)

    Aber so wie ich das sehe hat er in dem Script zwar ein Shebang (erste Zeile) aber das Problem wird "chmod 700" sein, da das die Datei nur für den Besitzer ausführbar macht - in diesem Fall pi, alle anderen Benutzer haben keinerlei Rechte auf die Datei (00).
    Da /etc/rc.local aber als root ausgeführt wird müßte also wenn die Gruppe der Datei "root" ist "chmod 710" gesetzt werden, oder 711 damit jeder die Datei ausführen aber nur pi diese auch bearbeiten darf... Über chmod +x wird erreicht das jeder die Datei ausführen darf (x = eXecute)

    Die Octal-chmod Rechte setzen sich wie folgt zusammen:

    1.Ziffer = Besitzer
    2.Ziffer = Gruppe
    3.Ziffer = Alle Anderen

    Ausführen = 1
    Schreiben = 2
    Lesen = 4

    7 = 4 + 2 + 1

    Mehr dazu kann man auf den folgenden Seiten nachlesen:
    http://wiki.ubuntuusers.de/Rechte
    http://wiki.ubuntuusers.de/chmod

  • Danke für diese Hilfen.
    Habe die Ausgabe nach "grep python" erhalten, komme damit als Newbie aber nicht weiter.
    Habe erwartet, dass die Ausführung des Scripts nach dem Start irgendwo automatisch die Ausgabe "test" erzeugt. Vielleicht auf der Shell? Habs wohl noch nicht verstanden. Gibt es im Rahmen eines solchen Scripts die Möglichkeit, ein Auswahlmenü auszugeben, in dem der weitere Ablauf durch Anklicken von Menüpunkten gesteuert werden kann?
    Für Verständnishilfe wäre ich sehr dankbar.
    Dittmar

  • So ich habe die Datei nun per chmod 711 umgestellt, nur sich was verändert hat sich leider nicht. Nur normal sollte es ja eigentlich nun funktionieren. Aber mal zur Randinfo, ich habe es auch mit +x genau so versucht und ergebnis ist das gleiche.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

Jetzt mitmachen!

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