Raspberry "Absturz" nach Empfangen serieller Daten

Gast #5035862
Lesenswert?

Hallo,

mein Problem ist folgendes: Ich habe einen Raspberry (A+) mit einem 
Teensy 3.6 über die serielle Verbunden, denn der Teensy soll den 
Raspberry über ein serielles Protokoll steuern. Auf den Raspberry wird 
ein Python-Programm automatisch gestartet welches dann an der serielle 
Schnittstelle "lauscht", sprich auf Befehle des Teensy's wartet. Der 
Teensy wartet ca. 1 Minute bis der Raspberry gebootet hat und versucht 
dann den den Raspberry "anzusprechen". Sobald der Teensy einige Bytes 
über sie serielle Schnittstelle an den Raspberry geschickt hat - stürzt 
der Raspberry ab. Ich vermute er geht in den "Halt"-Modus.
Wenn ich das Python-Programm am Respberry über ein Terminal (ssh) starte 
funktioniert alles problemlos, die Kommunikation zwischen den Devices 
ist ok - aber eben nicht beim Autostart des Skipts. Auf dem Raspberry 
habe ich die serielle Shell-Login, Modemmanager und getty deaktiviert.

Nach einigen Tagen Tagen des Probierens und Konfigurierens weiss ich nun 
nicht mehr weiter und hoffe auf einen Tip.

Danke ...
Gast #5035935
Lesenswert?

Hans schrieb:
> Wie startest du das Programm denn automatisch nach dem Booten?
>
> Falls du die rc.local verwendest: Schiebst du die Anwendung in den
> Hintergrund? Sonst blockiert die den Bootvorgang.

Würde mich jetzt auch interessieren. Ich habe auch verschiedene 
Möglichkeiten probiert, und am besten war immer ein Script in init.d und 
ein Link in rcX.d.

So wie Methode 1 in
https://jankarres.de/2014/07/raspberry-pi-autostart-von-programmen-einrichten/
Gast #5036754
Lesenswert?

Hallo,

ich habe jessie lite installiert und das Python Skript mittels rc.local 
automatisch gestartet. Jetzt starte ich das Skript mit crontab und es 
scheint zu laufen wie gewünscht. Ich werde das heute Abend nochmal 
genauer nachprüfen. Auf jeden Fall vielen Dank für die Hilfe.
Gast #5037270
Lesenswert?

Hans schrieb:
> Das richtige Vorgehen wäre übrigens systemd zu verwenden

Warum? Ist es bei Linux nicht grad so, daß es viele unterschiedliche 
Methoden gibt und nicht nur 'die richtige' und 'die falsche'?
Und wenn nicht, wer entscheidet welche der Möglichkeiten die einzig 
'richtige' ist?
Gast #5037286
Lesenswert?

Horst schrieb:
> Warum? Ist es bei Linux nicht grad so, daß es viele unterschiedliche
> Methoden gibt und nicht nur 'die richtige' und 'die falsche'?
> Und wenn nicht, wer entscheidet welche der Möglichkeiten die einzig
> 'richtige' ist?

Alles hat seinen Zweck.

In der rc.local und per Crontab @reboot sollten nur Scripte und 
Programme gestartet werden, die nur kurz! laufen und sich danach 
automatisch beenden. Hier wird allerdings offenbar ein Programm 
gestartet, dass über lange Zeit läuft. Daher hat es auch den Boot per 
rc.local blockiert. Das Problem ist nun, dass du ein Programm, dass du 
über die rc.local oder einen cronjob nur per killall bzw. kill <pid> 
beenden kannst.
Dazu kommt, dass über die rc.local gestartete Anwendungen (ohne 
Umleitung nach /dev/null) ihre Ausgaben auf  /dev/tty1 ausgeben. Möchte 
man auf dieser Konsole arbeiten, ist das schwierig.

Machst du das allerdings sauber über einen service, dann kannst du das 
Programm jederzeit per Befehl starten, stoppen oder neustarten. Dazu 
kommt, dass du bei systemd auch Abhängigkeiten erfüllen kannst. Benötigt 
dein Programm z.B. eine Netzwerkverbindung, dann wird es erst 
ausgeführt, sobald die dafür notwendigen Prozesse laufen.
Dazu kannst du im Fehlerfall die Ausgaben des Programms abfragen und 
somit Probleme identifizieren. Bei Cron oder rc.local landen diese 
Informationen im Nirvana.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren