Autostart von Python Programm

  • Hi wie gewünscht öffne ich hierzu einen Eigenen Thread:D

    ich habe folgenden python code, welcher auch funktioniert:

    Nun möchte ich das das Programm beim starten des Pi mitstartet.
    Dazu hab ich bereits folgendes probiert:

    1. Crontab
    Im crontab hab ich folgendes geschrieben

    Code
    @reboot python /home/pi/BlSensor1.py


    Die Datei BlSensor1.py hab ich mit

    Code
    sudo chmod +x

    ausführbar gemacht.

    Beim Neustart des Pi´s startet mein Programm leider nicht. Ich teste dies indem ich versuche mich via Bluetooth zu verbinden, jedoch ohne Erfolg.

    2. rc.local
    mit

    Code
    sudo /etc/rc.local

    die Datei zum berabeiten geöffnet und vor dem exit 0 folgende Zeile eingefügt

    Code
    python /home/pi/BlSensor1.py &

    Beim Neustart gab es auch hierbei kein Erfolg. Ich weiß nicht woran es liegt, muss man vl noch etwas beachten da ich Bluetooth verwende?

  • Ich erzeuge mir meine Autostart-Datei immer wie folgt:

    Programm ausführtbar machen:

    Code
    sudo chmod +x /home/pi/Programme/meinPythonprogramm.py

    Autostart-Datei erzeugen:
    sudo nano /etc/xdg/autostart/meinPythonprogramm.desktop
    und wie folgt editieren:

    Code
    [Desktop Entry]
    Name=meinPythonprogramm
    Exec=sudo /home/pi/Programme/meinPythonprogramm.py
    Terminal=false
    Type=Application

    Der Bluetooth-Stick muss aktiv sein, um deine Befehle ausführen zu können, ggf. musst du das beim Autostart berücksichtigen ;)

  • paul70078 erstmal thx :D
    ich habe es schon auf beide weisen versucht. Sprich mal mit sudo und mal ohne beides ohne Erfolg.

    kobold254 dir auch thx
    deine Vorgehensweise werde ich gleich ausprobieren. Weist du wie ich den Bluetooth Stick berücksichtigen kann?
    Meld mich gleich wieder mit der Info ob es geklppt hat.

    Muss man denn um Programme im Autostrt ausführen zu können auch Autologin haben?? Ich muss mich nämlich bei jedem start beim pi einloggen, stört das evt. ?

  • Also ich hab nun folgendes gemacht.
    ich hab meinem Prog erstmal alle ausführrechte sicherheitshalber nochmal gegeben.

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


    Im Anschluss habe ich die Autostart-Daatei erzeugt

    Code
    sudo nano /etc/xdg/autostart/BlSensor1.desktop


    In dieser Datei habe ich folgendes geschrieben:

    Code
    [Desktop Entry]
    Name=BlSensor1
    Exec=sudo /home/pi/BlSensor1.py
    Terminal=false
    Type=Application

    Nachdem ich das tat habe ich den Pi mit

    Code
    sudo shutdown -h now

    ausgeschaltet vom strom abgehängt und wieder eingeschaltet.
    Jedoch war ich auch hier Erfolglos und konnte keine Bluetooth Verbidung aufbauen.

    Kobold Mein Bluetooth Stick starte ich über die crontab datei was auch einwandfrei Funktioniert. Die Frage ist nun was wird zuerst ausgeführt mein Befehl im crontab oder das BlSensor1.py programm. Wenn das BlSensor1.py Programm überhaupt gestartet wird. Ebenso frage ich mich ob es in der utostart-Datei an der Stelle

    Code
    Exec=sudo /home/pi/BlSensor1.py

    nicht so aussehen müsste

    Code
    sudo python /home/pi/BlSensor1.py

    Einmal editiert, zuletzt von sizap (20. Dezember 2014 um 17:17)

  • Ja und nein:
    Du brauchst in deinem Python-Programm noch die Magic-Line

    was eher startet ist eine gute Frage, kannst auch die eine Zeile mit in dein Pythonprogramm packen ;)
    villeicht weiß einer der Debian/Raspbian-Experten etwas mehr über die Reihenfolge...

  • Hi,

    Du kannst auch einfach mit ls überprüfen ob die Rechte richtig gesetzt sind:

    Code
    $ ls -l /home/pi/sensor.py
    -rwxr-xr-x 1 pi pi 5021 Dec 20 17:53 sensor.py


    Die x bedueten dass die Datei in diesem Fall für alle Benutzer ausführbar ist. Mehr dazu hier
    http://wiki.ubuntuusers.de/Rechte


    Welches Skript zuerst ausgeführt wird könnte man z.b. testen indem man mit dem Programm logger ein Eintrag in der Logdatei (/var/log/messages) erzeugt.


    Zitat

    Bei cron ist kein login notwendig.


    Bei der rc.local auch nicht.



    ...Ebenso frage ich mich ob es in der utostart-Datei an der Stelle

    Code
    Exec=sudo /home/pi/BlSensor1.py

    nicht so aussehen müsste

    Code
    sudo python /home/pi/BlSensor1.py

    Ja, aber nur wenn das Pythonskript wie im ersten Post aussieht. Also in der ersten Zeilen kein Shebang gesetzt ist.
    Mehr dazu findest du über eine Forumuche und den Begriff Shebang. Die meisten Beiträge beziehen sich zwar auf Shellskripte, bei einem Pythonskript gilt aber das gleiche.

    DON'T PANIC!

  • Kobold was meinst du mit Magic-Line??

    joh.raspi Ich werde nun nochml die Zeile

    Code
    Exec=sudo python /home/pi/BlSensor1.py

    anpassen und es damit mal propieren. Und wenn ich alles richtig verstanden habe werde ich vorher mit

    Code
    $ ls -l /home/pi/sensor.py
    -rwxr-xr-x 1 pi pi 5021 Dec 20 17:53 sensor.py

    prüfen ob die Rechte stimmen. Bei mir müsste dies dann so aussehen

    Code
    $ ls -l /home/pi/BlSensor1.py


    Melde mich gleich wieder ;)

  • Jungs, bevor ihr hier jetzt verschiedene Autostart Möglichkeiten postet - es gibt bereits einen ausführlichen Tutorial Thread in dem alle Möglichkeiten aufgeführt sind -> Forumsuche nach: Autostart


    Autostart-Datei erzeugen:
    sudo nano /etc/xdg/autostart/meinPythonprogramm.desktop

    Diese Autostart-Variante funktioniert nur in Verbindung mit der Desktopumgebung, solange diese ebenfalls automatisch gestartet wird - also LXDE.

    rc.local wird beim anmelden am System ausgeführt

    Zunächst mal ist es nicht nur "rc.local" sondern stets "/etc/rc.local".
    Und zum anderen ist diese Aussage falsch. /etc/rc.local wird immer am Ende des Bootvorgangs ausgeführt, kurz bevor man sich überhaupt anmelden kann!
    Dabei handelt es sich ausserdem um eine normale Scriptdatei die über /bin/sh ausgeführt wird, und bei Raspbian ist voreingestellt dass darüber die aktuelle eth0-IP des PI's ausgegeben wird - die habt ihr bestimmt auch schon mal gesehen, kurz bevor ihr den Login Promt zu sehen kriegt.

    Das bedeutet also dass das hier gar nicht funktionieren kann:


    2. rc.local
    mit

    Code
    sudo /etc/rc.local

    die Datei zum berabeiten geöffnet

    hier fehlt die Angabe des Editor's um die Datei überhaupt bearbeiten zu können. Also wenn dann: sudo nano /etc/rc.local

    Wie ich aber auch schon auf seinen Original Post geantwortet hatte, sollte man stets vollständige Pfade zu den Programmen nutzen, sowohl in /etc/rc.local bzw crontab, als auch in den Scripts selber (also zB einem bash Script welches dann das python Script ausführen würde).
    Also NICHT

    Code
    sudo python /home/pi/BlSensor1.py

    in /etc/rc.local eintragen, sondern:

    Code
    /usr/bin/python /home/pi/BlSensor1.py

    Insbesondere aber sudo hier weglassen da /etc/rc.local bereits als root ausgeführt wird und somit auch alle dadrin befindlichen Befehle!


    Allgemein:

    Wenn es in crontab eingetragen wird, aber "angeblich" nicht ausgeführt wurde, dann hilft ein Blick ins Logfile:

    Code
    less /var/log/syslog

    Und dann den Zeitpunkt suchen zu dem es hätte gestartet werden sollen ("CRON" ist vom crontab Dienst)

  • So da bin ich wieder :lol:.
    Nun habe ich folgendes bekommen:

    Code
    ls -l /home/pi/BlSensor1.py
    -rwxr-xr-x 1 pi pi 2119 Dez 20 11:53 /home/pi/BlSensor1.py


    im Anschluss habe ich noch

    Code
    Exec=sudo /home/pi/BlSensor1.py


    in

    Code
    Exec=sudo python  /home/pi/BlSensor1.py

    geändert.
    dann reboot durchgeführt und mit voller Hoffnung ausprobiert ob das Programm starten. Nun wurden meine Hoffnungen wieder mal enttäuscht =(.
    Ich habe hier mal mit

    Code
    sudo nano /var/log/syslog

    mir die Logfile ausgeben lassen, dabei fällt auf das nirgendsetwas bezüglich meines BlSensor1.py Programm steht(bin kein Spezialist also knn mich auch irren). Nun ja ich habe heute Mittag wie bereits erwäht auch mit crontab versucht mein prog autozustarten dabei sieht man in der logfile folgendes

    Code
    Dec 20 13:29:28 raspberrypi /usr/sbin/cron[2058]: (CRON) INFO (pidfile fd = 3)
    Dec 20 13:29:28 raspberrypi /usr/sbin/cron[2061]: (CRON) STARTUP (fork ok)
    Dec 20 13:29:28 raspberrypi /usr/sbin/cron[2061]: (CRON) INFO (Running @reboot jobs)
    Dec 20 13:29:28 raspberrypi /USR/SBIN/CRON[2073]: (root) CMD (sudo  python /home/pi/BlSensor1.py &)

    Und denoch ging es nicht. Also langsam:wallbash::wallbash:
    :lol::lol::lol:

    meigrafd deinen Post hatte ich etwas zu spät gesehen eben.

    naja die Tutorials auf die du hinweist habe ich ja bereits ohne Erfolg ausprobiert deshalb dieser Thread.
    nun habe ich es nochmal mit der /etc/rc.local probiert und zwar habe ich

    Code
    sudo nano /etc/rc.local

    ausgeführt und an letzter stelle vor exit 0 folgendes eingefügt

    Code
    /usr/bin/python /home/pi/BlSensor1.py

    Leider war dies auch wieder ohne erfolg. Naja in der Log-Datei seh ich nun auch nix bezüglich meines Programms aber kann es sein das es daran liegt das ich es mit /etc/rc.local versuche und hier nix in die Logfile geschrieben wird.

    Einmal editiert, zuletzt von sizap (20. Dezember 2014 um 19:17)

  • Ich hab dir bereits mehrfach geschrieben das ein " & " in der Crontab nichts zu suchen hat.. Ebenso habe ich oben beschrieben das die von kobold254 beschriebene Variante nur in Verbindung mit dem Automatischen Start des Desktopumgebung funktioniert!

    Davon abgesehen sieht man nun endlich dass crontab deinen Eintrag tatsächlich ausführt - es liegt also nicht an crontab selbst, sondern wenn dann an dem Eintrag oder dem Script!
    Und da ich bereits mehrfach geschrieben habe das der Eintrag nicht in Ordnung sei, wäre es nun an der Zeit den Eintrag an sich mal zu ändern!

    Und wenn du das Tutorial vernünftig liest wird auch dort darauf hingewiesen dass in /etc/rc.local ein " &" eingetragen werden muss, aber in crontab nicht! Du machst es aber stets genau verkehrt herum :wallbash:

    /etc/rc.local hat auch nichts bezüglich CRON zu tun, was sollte dazu also auch im Log stehen?

    Wenn dann kannst Du Selber daher gehen und es protokolieren lassen.

    Bearbeite dazu /etc/rc.local und änder es so ab das es dann wie folgt aussieht:

    Dann neu starten und die Logdatei /tmp/rc.local.log bitte hier posten!

  • Wenn du in der 1. Zeile deines Pythonscripts folgendes einfügst:

    Python
    #!/usr/bin/python


    spars du dir das gehampel mit dem extra Pythonaufruf.
    Durch diese Zeile wird die Shell angewiesen, das hinter dem "Hashtag" stehenden Programm aufzurufen und das File zu übergeben (simpel gesprochen).

    Wenn du in der 2. Zeile noch

    Code
    # coding: utf-8


    einfügst, gibt es auch keine Warnungen bei Umlauten usw. in den Kommentarzeilen :thumbs1:


  • Wenn du in der 1. Zeile deines Pythonscripts folgendes einfügst:

    Python
    #!/usr/bin/python


    spars du dir das gehampel mit dem extra Pythonaufruf.
    Durch diese Zeile wird die Shell angewiesen, das hinter dem "Hashtag" stehenden Programm aufzurufen und das File zu übergeben (simpel gesprochen).

    ...Das geht dann aber auch nur wenn die Datei Ausführbar gemacht wurde...
    Wurde aber auch schon in Beitrag#9 und #11 darauf hingewiesen.

  • Hi,
    leider keine Zeit die letzten Tage durch den gazen Weihnachtsstress. Nun heute nachdem ich von der Arbeit kam habe ich mich direkt wieder an den Pi gesetzt und eure Hilfestellungen Tipps und Ratschlägel so gut es geht befolgt. Aktuell sieht die /etc/rc.local so aus :

    Nun ja hatte nicht viel gebracht. Ich habe nun nach weiteren Tutorials gesucht außerhalb des Forums. Da ich heute leider nicht mehr dazu komme und Weihnachten naht werde ich euch von meinem hoffentlichen Erfolg morgen oder in 2 vl. auch 3 Tagen Berichten können, jenachdem wie ich Zeit habe.

    Hier ein kleiner Rückblick.
    Also in Beitrag #1 und #7 habe ich bereits gezeigt das die Datei Ausführbar gemacht wurde. In Beitrag #10 habe ich sogar die root Rechte geprüft. Ebenso habe ich im Beitrag #1 gezeigt das ich in den Crontabs kein "&" habe und in /etc/rc.local eins steht und im Beitra# 13 habe ich das "&" versehentlich nicht mit kopiert. Nun ja damit keine weiteren Missverständnisse auftreten werde ich den Code nur noch komplett kopieren sodass nix vergessen wird.

    Ich wünsche euch allen schöne Feiertage genießt die Zeit.:bravo2:

    Hi Leute melde mich doch schneller als gedacht :D
    Habe soeben nocheinmal meine crontabs geändert.
    Und zwar habe ich

    Code
    crontab -e

    eingegeben um meine Cron jobs zu verwalten.
    Die Datei sieht nun wie folgt aus.


    In der /etc/rc.local habe ich die Zeile in der ich mein Prog aufrufe entfern.
    So gut voller Hoffnung (mal wieder) den Pi rebooten lassen und siehe da es funktioniert.
    ich nehme an, dass es wie meigrafd schon gesagt hatte wirklich daran lag das ich beim ersten versuch mit den Cronjobs am Ende ein "&" hatte.

    Also Leute konnte viel lernen und Erfahrungen sammeln und bin froh das es endlich tut und nicht nur einnmal :D
    :danke_ATDE::danke_ATDE:

    Einmal editiert, zuletzt von sizap (22. Dezember 2014 um 19:34)

Jetzt mitmachen!

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