Autostart rc-local die x-te

  • Hallo,

    ich habe mit Python3 ein Script geschrieben um meine Heizung zu monitoren.
    Das läuft auch wenn ich es aus Phython3 aufrufe.

    mit

    Code
    sudo chmod +x /home/pi/Temperatur/TempEinlesen_Shutdown.py


    habe ich auch die entsprechenden root Rechte vergeben. Diese sehe ich auch in den Dateieigenschaften.
    Inhalte Anzeigen: Jeder
    Inhalte ändern: Nur Besitzer
    Ausführen: Jeder

    in

    Code
    sudo nano /etc/rc.local

    steht

    Code
    /usr/bin/python3 /home/pi/Temperatur/TempEinlesen_Shutdown.py &
    
    
    exit0

    Versucht habe ich das Shebang zu ändern.

    Python
    #!/usr/bin/python3
    #!/usr/bin/python
    #!/usr/bin/env python3
    #!/usr/bin/env python

    und ich habe in rc.local habe ich folgendes versucht

    Es will einfach nicht klappen.

    Auch einen, wohl eher kurzen, Versuch mit crontab -e habe ich hinter mir.

    Woran kann das liegen?

    Ich habe meinen RaPi erst eine Woche und arbeite seit dem auch erst mit Python.

    Gruß
    Joker

  • Da, wenn etwas in der rc.local ausgeführt wird, keine Benutzerumgebung geladen wird, muss für alles, was in dem Programm aufgerufen wird, der absolute Pfad im Programm stehen (oder in der gestarteten Umgebung gesetzt werden)

    Woher soll z.B. das Programm wissen, wo die Datenbank liegt, wo die zu importierende Include-Datei liegt, ...

    Bei der Crontab ist es genauso.

    Computer ..... grrrrrr

  • Oh, danke für den Hinweis.
    Das hatte ich trotz intensiver suche noch nicht gelesen.

    Was meinst Du denn mit "Include-Datei"?

    Ich habe nun zur SQLite Datenbank den absoluten Pfad angegeben.

    Code
    #SQL anlegen/öffnen
    conn = sqlite3.connect("/home/pi/Temperatur/Temperatur.db")
    c = conn.cursor()

    Sonst sehe ich nichts was nicht absolut angegeben ist.

    Wäre folgender Aufruf denn korrekt?

    Shebang

    Python
    #!/usr/bin/python3

    rc.local

    Code
    /home/pi/Temperatur/TempEinlesen_Shutdown.py &
  • Ich habe mit

    Code
    ps -ef | grep python

    geschaut was läuft.
    Bevor ich diesen Befehl gefunden habe, habe ich einfach in die SQL Datenbank geschaut ob dort Daten ankommen. ;)

    Es läuft aber leider immer noch nicht.

    Hab also nun den Pfad wie oben geschrieben angepasst und Shebang und rc.local auch wie oben geschrieben verwendet.

    Muss ich den "Import" z.B. von sqlite3 evtl. auch über einen absoluten Pfad machen?

    Code
    import /usr/bin/sqlite3

    muss man das mit allen Modulen die man importiert machen?
    Mit "which" kann ich ja den Pfad anzeigen lassen.

    Danke für deine Hilfe.
    Automatisch zusammengefügt:
    Es läuft leider immer noch nicht

    Hab nun auch den import von sqlite3 angepasst weil dies das einzige Modul ist welches mit which einen Pfad ausgibt.
    Scheint aber nicht so Lösung zu sein. :(


    Code
    import re, time, os, sys
    sys.path.append("usr/bin/")
    import sqlite3
    #import tkinter
    import RPi.GPIO as GPIO

    Einmal editiert, zuletzt von AcJoker (30. Dezember 2016 um 12:02)

  • Die Benutzerumgebung hat nichts mit der Pythonumgebung zu tun. Du musst also beim "import" keine absoluten Pfade angeben, wohl aber bei dem Pfad zur Datenbankdatei

    sys.path.append("usr/bin/")

    ist kein absoluter Pfad, da fehlt ein /

    Funktioniert das Script denn bei manueller Ausführung, also läuft es dann permanent im Hintergrund? Wenn nicht kann crontab & Co auch nicht zaubern.

  • Vergiß den "absoluten Pfad zum Modul": "which sqlite3" gibt Dir den Pfad zum slite3-executable aus, das hat mit dem python-Modul erst mal nix zu tun.

    Auf Anhieb sehe ich auch nicht, wo's hängt. Leite doch mal die Ausgabe in eine Datei um ("/home/pi/Temperatur/TempEinlesen_Shutdown.py &> /home/pi/Temperatur/logfile &") und schaue, ob deren Inhalt irgendwelchen Aufschluß bietet, was schiefläuft.

  • Wollte grade schon schreiben


    Als ich dann nochmal die aktuellen rc.local und den aktuellen Script einfügen wollte, viel mir auf das ich ganz simpel einen falschen Buchstaben in rc.local habe. :@

    Code
    /usr/bin/python3 /home/pi/Temperatur/TempEinlesen_Shutdown.px &

    Also /TempEinlesen_Shutdown.px &


    Den Script habe ich immer kopiert, aber leider kann ich aus nano nichts kopieren wenn ich mit VNC verbunden bin.
    Also habe ich es von Hand abgeschrieben, im Forum natürlich korrekt, nur in der echten rc.local nicht. :wallbash:

    Ich denke aber das es dennoch nicht geklappt hätte wenn der Pfad zur SQL-DB nicht angegeben war.

    Herzlichen Dank für die Hilfe. :bravo2: :thumbs1::danke_ATDE:

    Und nun :angel: , es läuft endlich. :D
    Automatisch zusammengefügt:

    Wollte grade schon schreiben


    Als ich dann nochmal die aktuellen rc.local und den aktuellen Script einfügen wollte, viel mir auf das ich ganz simpel einen falschen Buchstaben in rc.local habe. :@

    Code
    /usr/bin/python3 /home/pi/Temperatur/TempEinlesen_Shutdown.p[size=36][color=#ff3333][u][b]x[/b][/u][/color][/size] &

    Den Script habe ich immer kopiert, aber leider kann ich aus nano nichts kopieren wenn ich mit VNC verbunden bin.
    Also habe ich es von Hand abgeschrieben, im Forum natürlich korrekt, nur in der echten rc.local nicht. :wallbash:

    Ich denke aber das es dennoch nicht geklappt hätte wenn der Pfad zur SQL-DB nicht angegeben war.

    Herzlichen Dank für die Hilfe. :bravo2: :thumbs1::danke_ATDE:

    Und nun :angel: , es läuft endlich. :D
    Automatisch zusammengefügt:

    Auf Anhieb sehe ich auch nicht, wo's hängt. Leite doch mal die Ausgabe in eine Datei um ("/home/pi/Temperatur/TempEinlesen_Shutdown.py &> /home/pi/Temperatur/logfile &") und schaue, ob deren Inhalt irgendwelchen Aufschluß bietet, was schiefläuft.


    Dieser Eintrag bezieht sich auf rc.local, oder?
    Für das nächste mal sicher eine Möglichkeit die ich mir merken werde. Danke.

    Einmal editiert, zuletzt von AcJoker (30. Dezember 2016 um 12:52)

  • Zitat


    Den Script habe ich immer kopiert, aber leider kann ich aus nano nichts kopieren wenn ich mit VNC verbunden bin.
    Also habe ich es von Hand abgeschrieben, im Forum natürlich korrekt, nur in der echten rc.local nicht.


    Bei putty kann ich den Inhalt der Zwischenablage mit rechtsklick einfügen, auch in nano.

  • Putty (SSH) geht bei mir leider nicht da sich im aktuellen Raspbian Image VNC und SSH nicht vertragen.
    Beides ist aber vorinstalliert.
    Ich müsste nun wohl VNC deinstallieren damit SSH läuft.
    Bisher war ich mir VNC aber zufrieden, zumal ich VNC gewohnt bin.

    Das Kopieren aus der Python IDE geht auch teilweise bei VNC nicht, öffne ich die IDE neu, klappt es plötzlich.
    Naja, nach einer Woche Raspbian ist eben noch nicht alles perfekt. ;)

    Nun geht es an die Einbindung eines Ultraschallsensors. :)
    Script sollte hoffentlich schon passen. Hardware kam heute an und wird nun zurecht gemacht.

  • Tja, leider klappt es doch nicht wie gewünscht.
    Hatte mein Script wird nur einmal ausgeführt und dann ist ende.

    Ich kann mir nicht erklären warum die Schleife nicht wie üblich endlos durchlaufen wird.

    Was könnte das Problem sein?

    Ich habe jetzt sogar schon versucht das eigentliche Script mit einem anderen zu starten.
    D.h. mit rc.local nur ein Script gestartet das dann mein eigentliches Script startet.
    Es bleibt beim einmaligen durchlauf ohne Endlosschleife.

    Aus der Python IDE heraus klappt alles bestens.

    Auch mit

    Code
    sudo crontab -e
    Code
    @reboot /home/pi/Temperatur/TempEinlesen_Shutdown.py &
    oder
    
    
    @reboot /home/pi/Temperatur/TempEinlesen_Shutdown.py &>/home/pi/Temperatur/log &

    läuft der Script, aber leider auch nur einmal.
    Die Logdatei bleibt leer.

    Es kann doch eigentlich nur sein das in der Schleife, nachdem die Daten in die SQLite Datenbank geschrieben wurden, ein Fehler passiert und dadurch der Script abbricht, oder sehe ich das falsch?
    Gibt es da evtl. noch andere Dinge die passieren können?
    Automatisch zusammengefügt:
    Fehler gefunden.

    1. Als ich dachte es läuft, habe ich die Datenbank gelöscht um mit einer frischen/sauberen DB Testdaten zu sammeln.
    Die neue DB wurde dann aber scheinbar beim Systemstart von "root" erzeugt, so das der Benutzer "Pi" keine Rechte mehr hatte.
    Aufgefallen ist mir das als ich auf die Idee kam nach den Rechten der Datenbank zu schauen und ich diese nicht ändern konnte, keine Zugriffsrechte.

    2. Es hat sich leider noch ein blöder Fehler eingeschlichen.
    Beim hin und her probieren hat sich in die Schleife ein

    Code
    conn.close()


    eingeschlichen, das dort natürlich nicht hin gehört. Somit war die DB nach der dem ersten Lauf geschlossen.
    K.a. wie das dort hin kommt.

    Klappt jetzt übrigens auch mit

    Code
    sudo crontab -e

    Einmal editiert, zuletzt von AcJoker (31. Dezember 2016 um 01:37)

Jetzt mitmachen!

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