Welcome, Guest
Username: Password: Remember me
Software
  • Page:
  • 1
  • 2

TOPIC:

Python App Autostart mit Raspbian und Pixel 6 years 10 months ago #1

  • PiLo-Heinz
  • PiLo-Heinz's Avatar Topic Author
  • Offline
  • Posts: 105
  • Thank you received: 25
Für den Autostart von Programmen und Scripts gibt es unter Linux diverse Methoden für die es viele Anleitungen im Netz gibt.
Seit Einführung des Pixel Desktops unter Raspbian ist es dort aber ein klein wenig anders - aber trotzdem recht einfach.
Wenn die PiLogger Basis-Software zum permanenten Loggen benutzt wird, wäre ein Stromausfall oder ein, wie auch immer verursachter Reset fatal, wenn niemand da ist um das Programm wieder zu starten.
Deshalb will ich hier an diesem Beispiel beschreiben wie man das macht - für den Fall, dass Raspbian ganz normal in die grafische Oberfläche (GUI) gestartet wird:

1. Versteckte Dateien sichtbar machen
Wir öffnen den Dateimanager und gehen dort in das Menu 'Ansicht'. Dort klicken wir auf die Option 'Versteckte anzeigen' (falls noch kein Haken davor zu sehen ist).
Damit werden jetzt auch versteckte Dateien und Ordner angezeigt. Im Dateifenster sollten jetzt ein paar mehr Dateien aufgetaucht sein.

2. Zum Zielordner navigieren
Im Startverzeichnis /home/pi des Dateimanagers ist nun auch der Ordner .config zu sehen.
Wir navigieren nun zum Zielverzeichnis /home/pi/.config/lxsession/LXDE-pi indem wir nacheinander diese Ordner doppelklicken:
.config -> lxsession -> LXDE-pi
Hier finden wir die Datei 'autostart', die beim Systemstart als Letztes auszuführende Aktionen enthält.

3. Sicherheitskopie anlegen
Da wir nun diese Datei verändern wollen, ist es eine gute Idee eine Sicherheitskopie zu erzeugen.
Beim Kopieren und Einfügen in den selben Ordner werden wir gefragt, ob wir die Kopie umbenennen wollen.
Einfach ein .org hinten dran hängen und wir haben eine Sicherheitskopie für den Fall der Fälle.

4. Datei 'autostart' editieren
Nun Rechtsklicken wir auf die Datei 'autostart' ohne Endung und wählen im Kontextmenu die Option 'Text Editor'.
Damit wird die Datei direkt im Editor geöffnet.
Die letzte Zeile enhält @point-rpi , und wird nicht mehr benötigt. Sie sorgt lediglich dafür, dass nach dem Start als Letztes der Mauszeiger auf das Raspberry-Menu zeigt.
Diese Zeile ändern wir auf :
@python3 /home/pi/PiLogger/PiLogger.py

Nun noch die Datei speichern und schliessen.



Im Bild sieht man das verkleinerte Fenster des Editors mit der geöffneten und bereits geänderten Datei.

Diese Zeile startet den Python-Interpreter mit dem Programm der Basis-Software.
Wichtig: Das System befindet sich zum Zeitpunkt der Ausführung nicht im richtigen Verzeichnis, deshalb muss der vollständige Pfad angegeben werden.

In der Datei 'autostart' werden üblicherweise gerne Shell Scripts gestartet, weil diese eine ganze Reihe von Aktionen durchführen können, unter Anderem auch das Wechseln des aktuellen Verzeichnisses (Pfad).
Oft greifen Programme auf weitere Dateien zu - auch in unserem Fall die PiLogger-Software - wenn diese nicht vom aktuellen Pfad aus zu erreichen sind, kommt es zu einem 'not found'-Fehler und die Ausführung bricht ab - meist ohne jede Meldung.
Das sieht dann so aus als habe der Autostart nicht geklappt - was ja auch so ist, nur dass man nicht weiß warum.
Damit die PiLogger-Software nicht auf dieses Problem stößt, haben wir sie so angepasst, dass sie zuerst das Verzeichnis bestimmt, in dem sich ihre eigene Datei befindet, um dies als Pfad zu den weiteren Dateien zu verwenden.
Es muss also mindestens Version 1.2 verwendet werden (Download-Bereich).

Jetzt nur noch den Raspberry neu starten und ... !

Viel Spass und Erfolg !
Attachments:
The following user(s) said Thank You: deMicha

Please Log in or Create an account to join the conversation.

Nichts ist unmöglich :-)
Last edit: by PiLo-Heinz.

Python App Autostart mit Raspbian und Pixel 6 years 3 weeks ago #2

  • deMicha
  • deMicha's Avatar
  • Offline
  • Posts: 4
  • Thank you received: 2
Hallo PiLo-Heinz,
vielen Dank für diesen Beitrag.
Bei mir startet das Programm damit aber zweimal => einmal sichtbar und nochmal im Hintergrund.
An was könnte dies liegen?
Gruß deMicha

Please Log in or Create an account to join the conversation.

Python App Autostart mit Raspbian und Pixel 6 years 3 weeks ago #3

  • PiLo-Heinz
  • PiLo-Heinz's Avatar Topic Author
  • Offline
  • Posts: 105
  • Thank you received: 25
Hallo deMicha,
ich habe gerade mit einer frischen Installation das Ganze nochmal getestet - bei mir funktioniert es wie gewünscht.
Was meinst Du mit "im Hintergrund" ? Da die Basis-Software eine grafische Python-Anwendung ist, kann es hier eigentlich sowas nicht geben :unsure:
Meinst Du vielleicht die Task-Leisten-Anzeige ? (siehe Screenshot)

Gruß PiLo-Heinz
Attachments:
The following user(s) said Thank You: deMicha

Please Log in or Create an account to join the conversation.

Nichts ist unmöglich :-)

Python App Autostart mit Raspbian und Pixel 6 years 3 weeks ago #4

  • deMicha
  • deMicha's Avatar
  • Offline
  • Posts: 4
  • Thank you received: 2
Hallo PiLo-Heinz,
vielen Dank für Deine Antwort und auch für die Bemühungen.

Versuche die Situation mal zu erklären:
Der Raspi hängt am USB-Anschluss des Solarreglers zur Spannungsversorgen des Raspi dran. Bei Unterschreitung von 10,5V Akkuspannung schaltet der Solarregler zwecks Unterspannungsschutz die Versorgungsspannung ab und bei ca 12V wieder an. Deswegen möchte ich gerne einen Autostart realisieren. Das PiLogger-Programm habe ich ein wenig für eine tägliche Log-Datei, Auslesung der CPU-Temperatur und zum schicken der Werte zu ThingSpeak umgeschrieben. Ansonsten ist es das original Programm nur mit einem anderen Dateinamen "PiLogger_date_cpu_ts.py". Die log-Einstellung habe ich auf 60sec gesetzt somit auch das Senden der Daten zu ThingSpeak per Minute.
Heute morgen habe ich mal die verschieden Situationen durchgetestet und frage mit dem Befehl "ps -ef | grep python" die laufende Python Sessions ab.

Situation 1:
Nach reboot ohne Einträge in Autostart oder crontab:
pi@rasppi-solar:~ $ ps -ef | grep python
pi 1113 1104 0 11:21 pts/0 00:00:00 grep --color=auto python
pi@rasppi-solar:~ $
Es läuft also nichts!

Situation 2:
Eintrag in Autostart:
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi
@python3 /home/pi/PiLogger/PiLogger_date_cpu_ts.py
Nach reboot mit Eintrag in der Autostart:
pi@rasppi-solar:~ $ ps -ef | grep python
pi 728 544 7 11:31 ? 00:00:02 python3 /home/pi/PiLogger/PiLogger_date_cpu_ts.py
pi 1044 963 9 11:31 ? 00:00:02 python3 /home/pi/PiLogger/PiLogger_date_cpu_ts.py
pi 1137 1125 0 11:31 pts/0 00:00:00 grep --color=auto python
pi@rasppi-solar:~ $
Das Programm läuft zweimal, einmal mit PiLogger-Monitor und einmal ohne PiLogger-Monitor. Nach Stopp im PiLogger-Monitor läuft im Hintergrund das andere Programm weiter:
Anzeige nach Stopp PiLogger-Monitor
pi@rasppi-solar:~ $ ps -ef | grep python
pi 728 544 1 11:31 ? 00:00:13 python3 /home/pi/PiLogger/PiLogger_date_cpu_ts.py
pi 1985 1125 0 11:43 pts/0 00:00:00 grep --color=auto python
pi@rasppi-solar:~ $
Die Daten werden auch weiter an ThingSpeak gesendet.

Situation 3: (und erstmal eine Lösung für meine Anwendung)
Eintrag in crontab (pi user) mit reboot Log-Datei:
@reboot sleep 60; DISPLAY=":0" /home/pi/PiLogger/PiLogger_date_cpu_ts.py >> /home/pi/reboot_log.txt 2>&1
Nach reboot mit Eintrag in crontab ohne Autostart:
pi@rasppi-solar:~ $ ps -ef | grep python
pi 1128 300 5 11:02 ? 00:00:46 /usr/bin/python3 /home/pi/PiLogger/PiLogger_date_cpu_ts.py
pi 1363 1106 0 11:17 pts/0 00:00:00 grep --color=auto python
pi@rasppi-solar:~ $
Programm läuft und sendet auch die Werte nach ThingSpeak dabei wird der PiLogger-Monitor nicht angezeigt.

Das Problem mit dem Autostart wird wohl an meinen Einstellungen hängen und ist auch kein großes Problem nur verstehen würde ich es gerne.
Wenn das Programm zweimal läuft bekomme ich je nach Zeitversetzung doppelt Einträge in ThingSpeak anstatt wie in den PiLogger-Einstellung für log per Minute.

Hoffe ich konnte dies irgendwie verständlich rüberbringen und bedanke mich für das Durchlesen und freue mich über eine Antwort.
Den "PiLogger one" kann ich wirklich empfehlen und das Beispiel Programm läuft auch gut und sauber.

Gruß an Alle
deMicha
The following user(s) said Thank You: PiLo-Heinz

Please Log in or Create an account to join the conversation.

Python App Autostart mit Raspbian und Pixel 6 years 3 weeks ago #5

  • PiLo-Heinz
  • PiLo-Heinz's Avatar Topic Author
  • Offline
  • Posts: 105
  • Thank you received: 25
Hallo deMicha,

Danke für die ausführliche Beschreibung.
Das mit 'ps' hätte ich als nächstes gefragt ... :)
Bei mir taucht immer nur der vom Autostart aufgerufene Prozess auf. Wenn ich zusätzlich den PiLogger Monitor manuell starte (Desktop-Verknüpfung), wird ein weiterer Prozess gestartet und es öffnet sich ein weiteres Monitor-Fenster.
Kann mir nur vorstellen, dass mit der ThingSpeak Modifikation ein weiterer Python-Prozess gestartet wird, der Teile des PiLo-Monitors verwendet. Ist das möglich ? Dann läge es daran, dass die verwendeten Teile nicht als class definiert sind, die Wiederverwendung also dummerweise das ganze Programm startet...
Die deutlich höhere Prozessnummer des zweiten Monitor-Prozesses lässt mich das vermuten.

Nachtrag:
Im crontab Versuch, sagst Du, taucht kein Monitor-Fenster auf ?
Hast Du in der tkinter-Hauptschleife ein sleep oder wait oder ähnliches ?
Aber auch dann müsste ja irgendwann einmal der View-Teil durchlaufen werden ... seltsam.

Nachtrag 2:
~erst denken - dann schreiben ~
uups - habe gerade erst DISPLAY=":0" gesehen !
Vermute mal, das das der Grund für 'kein Monitor-Fenster' ist.
Wenn das so gewollt ist, ist es ja erstmal gut, erklärt aber noch nicht die Doppelausführung
mit LXDE Autostart :(

Gruß,
PiLo-Heinz
The following user(s) said Thank You: deMicha

Please Log in or Create an account to join the conversation.

Nichts ist unmöglich :-)
Last edit: by PiLo-Heinz.

Python App Autostart mit Raspbian und Pixel 6 years 3 weeks ago #6

  • deMicha
  • deMicha's Avatar
  • Offline
  • Posts: 4
  • Thank you received: 2
Hallo nochmal,

ohne DISPLAY=":0" bekomme ich einen Fehler von tkinter nach dem Ausführen des cronjobs.
Den Monitor brauche ich nicht unbedingt da ich die Werte im Internet ersehen kann. Außerdem habe ich ja noch zur Not die tägliche Logdateien vom PiLogger. Mit ThingSpeak ( ist nur ein Zweizeiler und inport urllib) kann die Doppelausführung nichts zu tun haben, eher vielleicht den geänderten Ablauf zur Erstellung der täglichen Logdatei? :dry:
Ist aber alles kein großes Problem, das Programm läuft und das ist die Hauptsache.
Einen schönen Abend noch und vielen Dank :)
Gruß deMicha

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
  • 2
Time to create page: 0.593 seconds