Autostart Python Script

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
DatMichi
User
Beiträge: 25
Registriert: Montag 25. Mai 2015, 20:35

Hallo,

ich habe eine doch etwas schwieriges Problem.
Auf meinem Raspberry läuft Motion welches bei Bewegungserkennung in eine mysql Datenbank schreibt.
Bei Beendigung der Bewegung wird ein Python Script gestartet welches auf die mysql Datenbank zugreift.

Das funktioniert solange ich Motion von Hand in der Konsole starte.

Jetzt habe ich mein Motion als Daemon umgestellt und den Startbefehl in die /etc/rc.local geschrieben.
Das funktioniert auch noch. Motion schreibt ganz lieb in die Datenbank. Nur das Python Script wird nicht mehr
gestartet. Ich habe mal einige Module weggelassen und ich vermute es liegt an dem Modul pymysql welches
die Schnittstelle zur sql Datenbank bereitstellt.

Ich stehe vor einem Rätsel. Ich hoffe ihr könnt mir helfen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was ist denn das für ein Script und wie wird es gestartet? Woher weißt Du, dass es auch über den Daemon gestartet wird, wenn Du die Abhängigkeit zur DB wegnimmst?

Das Modul ``pymysql`` als solches ist ja nach wie vor auf dem System verfügbar. Insofern kann die Verwendung des Moduls alleine nicht ausschlaggebend sein. Evtl. gibt es da ein Rechteproblem o.ä., so dass die Verbindung zur DB nicht mit dem Benutzer des Daemons aufgebaut werden kann? Das solltest Du aber herausbekommen, indem Du ein Logging einbaust, welches den Status der Verbindung nach dem Anmelden wegschreibt. Ggf. baust Du das noch an anderen Stellen ein, wie einem lesenden oder einem schreibenden Statement, um dem Problem auf die Spur zu kommen.

Aber ein paar mehr Details zu den Mechanismen wären schon hilfreich.

Du könntest einfach auch mal ein Minimalbeispiel konstruiere; also z.B. ein simples Bash-Script als Daemon, welches lediglich ein kleines Python-Script aufruft, welches sich zur DB verbindet und versucht zu lesen und zu schreiben. Das mit Logging-Ausgaben versehen und einmal manuell und einmal über den Daemon-Mechanismus starten. Damit kommt man dem Problem evtl. schneller auf die Spur.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
DatMichi
User
Beiträge: 25
Registriert: Montag 25. Mai 2015, 20:35

Es ist ja so wenn ich Motion von Hand mit motion start aufrufe funktioniert alles.
Nur wenn motion per Autostart gestartet wird nicht.

Das wegschreiben in die SQL Datenbank funktioniert immer. Nur das Python Script wird nicht aufgerufen
oder läuft auf einen Fehler.

Ich habe mal ein weiteres Python Script geschrieben welches nur das Modul pymysql besitzt und nur einfach
eine Datei erzeugt.

Nehme ich den Import von pymysql raus läuft alles baue ich es ein dann nicht mehr.
Das verwundert mich alles etwas.
Trial&Error
User
Beiträge: 8
Registriert: Freitag 24. Juni 2016, 09:21

Wie sieht es denn mit den Rechten aus?

Als welcher User führst du es manuell aus und mit welchen Userrechten lässt du es ausführen wenn es automatisch laufen soll?
Antworten