Forum: Mikrocontroller und Digitale Elektronik DHT22 auf Raspi - Programm läuft nicht


von Hector A. (h3ctor)


Lesenswert?

Hallo Leute,

ich war auf der Suche nach einer Möglichkeit Daten (mitunter 
Temperaturen) zu protokollieren.

Dazu habe ich folgende tolle Seite gefunden:
http://www.sweetpi.de/blog/436/luftfeuchtigkeit-und-temperatur-mit-dem-raspberry-pi-messen

Ich habe das vorgefertigte Programm so abgeändert, dass eine CSV Datei 
mit Timestamp und den Daten erstellt wird und die Daten jede Minute dort 
geschrieben werden.

Das Ganze funktioniert, wenn ich das Programm über putty starte 
einwandfrei und die Datei wird auch erstellt und mitprotokolliert.

Nun zu meinem Problem(en):
1.) Wenn ich Putty einfach schliesse, dann beendet sich anscheinend auch 
das Programm zum mitprotokollieren?!?! Denn die Aufzeichnung endet dann.

2.) Wieso muss man das Programm über ./pfad/programm starten??
Für was ist der Punkt und der Backslash?

3.) Wie kann ich das Programm in den Autostart von Raspi verschieben?
Ich weiß, dass ich normalerweise nur den Pfad zum Programm in die Datei 
"etc/rc.local" reinschreiben muss und dann startet das Programm auch. Da 
aber der "Pfad" so seltsam mit ./ ist funktioniert dies leider nicht.

4.) Wie wird das Ganze kompiliert? Was bewirkt dieses make?
Ich kenne nur den g++ und den gcc Kompiler auf dem Raspi.

Vielen Dank für eure Hilfe!!

von PittyJ (Gast)


Lesenswert?

Besorg dir ein Buch über Unix und die Unix-Shell.

Da ist z.B. beschrieben, wie man mit & Programme im Hintergrund weiter 
laufen lassen kann.
Wie die Pfade funtionieren und was es mit PATH auf sich hat.
Über make gibt es eigene Bücher, anfangen kann man auch mit
http://de.wikipedia.org/wiki/Make
Was einen Überblick verschafft. Weitere Literatur dazu steht unten im 
Wikipedia-Artikel.

von g457 (Gast)


Lesenswert?

> 1.) Wenn ich Putty einfach schliesse, dann beendet sich anscheinend auch
> das Programm zum mitprotokollieren?!?! Denn die Aufzeichnung endet dann.

Klar. VNC oder screen könnten hier Abhilfe schaffen. Oder in einen Dämon 
verschieben.

> 2.) Wieso muss man das Programm über ./pfad/programm starten??
> Für was ist der Punkt und der Backslash?

..weil Du den Pfad nicht in PATH drin hast. Der Punkt ist das aktuelle 
Verzeichnis und der ∗Vorwärts∗-Slash ist das Verzeichnistrennzeichen.

> 3.) Wie kann ich das Programm in den Autostart von Raspi verschieben?
> Ich weiß, dass ich normalerweise nur den Pfad zum Programm in die Datei
> "etc/rc.local" reinschreiben muss und dann startet das Programm auch. Da
> aber der "Pfad" so seltsam mit ./ ist funktioniert dies leider nicht.

Siehe 2.) - adäquat in PATH aufnehmen oder den Pfad korrekt (hier: 
absolut) angeben.

> 4.) Wie wird das Ganze kompiliert? Was bewirkt dieses make?
> Ich kenne nur den g++ und den gcc Kompiler auf dem Raspi.

make ist ein Buildmanagementtool das (u.a.) dazu genutzt werden kann um 
mit g++ oder gcc oder wasauchimmer Quellcode zu compilieren (und zu 
linken). Schau spaßeshalber mal in des von configure erzeugte Makefile 
rein :-)

von Hector A. (h3ctor)


Lesenswert?

g457 schrieb:
>> 1.) Wenn ich Putty einfach schliesse, dann beendet sich anscheinend auch
>> das Programm zum mitprotokollieren?!?! Denn die Aufzeichnung endet dann.
>
> Klar. VNC oder screen könnten hier Abhilfe schaffen. Oder in einen Dämon
> verschieben.
>

So klar ist das für mich nicht. Denn alle andren Programme die ich 
bisher über putty gestartet habe sind auch weitergelaufen!

>> 2.) Wieso muss man das Programm über ./pfad/programm starten??
>> Für was ist der Punkt und der Backslash?
>
> ..weil Du den Pfad nicht in PATH drin hast. Der Punkt ist das aktuelle
> Verzeichnis und der ∗Vorwärts∗-Slash ist das Verzeichnistrennzeichen.
>

Upps...meinte natürlich Slash. :-)

>> 3.) Wie kann ich das Programm in den Autostart von Raspi verschieben?
>> Ich weiß, dass ich normalerweise nur den Pfad zum Programm in die Datei
>> "etc/rc.local" reinschreiben muss und dann startet das Programm auch. Da
>> aber der "Pfad" so seltsam mit ./ ist funktioniert dies leider nicht.
>
> Siehe 2.) - adäquat in PATH aufnehmen oder den Pfad korrekt (hier:
> absolut) angeben.
>

Eigentlich ist der Pfad /pfad/progamm absolut, aber so kann ich das 
Programm nicht starten!!
Wie komme ich zum absoluten Pfad, falls dieser wirklich nicht absolut 
ist??

>> 4.) Wie wird das Ganze kompiliert? Was bewirkt dieses make?
>> Ich kenne nur den g++ und den gcc Kompiler auf dem Raspi.
>
> make ist ein Buildmanagementtool das (u.a.) dazu genutzt werden kann um
> mit g++ oder gcc oder wasauchimmer Quellcode zu compilieren (und zu
> linken). Schau spaßeshalber mal in des von configure erzeugte Makefile
> rein :-)

Das heißt make nutzt in Wirklichkeit eh g++?


DANKE für deine Hinweise!!

@PittyJ: Bin nicht auf der Suche nach Literatur, sondern auf der Suche 
nach konkreten Hinweisen! Ansonsten hätt ich bei amazon geschaut und 
nicht hier im Forum! ;-)

von Blinky (Gast)


Lesenswert?

Hector Albadez schrieb:
> 1.) Wenn ich Putty einfach schliesse, dann beendet sich anscheinend auch
> das Programm zum mitprotokollieren?!?! Denn die Aufzeichnung endet dann.

Dein Programm wird als Unterprozess (Child) deiner Benutzersession 
(Parent) gestartet. Wird diese Beendet dann werden auch alle 
dazugehörigen Unterprozesse beendet.
Dieses Verhalten kann man mit dem Befehl "nohup" verhindern da dieser 
Befehl das Programm abgekoppelt von Deiner Benutzersession startet.
Also z.B.: nohup "Dein_Programm" &
(Das & Schickt das Programm in den Hintergrund).


> 2.) Wieso muss man das Programm über ./pfad/programm starten??
> Für was ist der Punkt und der Backslash?

Ein "." Bezeichnet das aktuelle Verzeichnis. "./Programm" Startet das 
Programm mit Namen "Programm" im aktuellen Verzeichnis. Der Grund kann 
sein das der Pfad nicht in der Pfadvariablen vorhanden ist oder z.B. bei 
Root das automatische Verfolgen von Pfadvariablen deaktiviert ist.

> 3.) Wie kann ich das Programm in den Autostart von Raspi verschieben?
> Ich weiß, dass ich normalerweise nur den Pfad zum Programm in die Datei
> "etc/rc.local" reinschreiben muss und dann startet das Programm auch. Da
> aber der "Pfad" so seltsam mit ./ ist funktioniert dies leider nicht.

In /etc/rc.local muß der komplette Pfad rein. Wie gesagt "./" bezeichnet 
das aktuelle Verzeichnis und ich glaube nicht das Dein Programm in 
"/etc" liegt.

>
> 4.) Wie wird das Ganze kompiliert? Was bewirkt dieses make?
> Ich kenne nur den g++ und den gcc Kompiler auf dem Raspi.
Make wird mit Kommandos aus einer Make Datei gefüttert. In dieser Datei 
ist auch vorgegeben welcher Compiler verwendet wird.

Wenn es ein vorgefertigtes Programm ist, ist der "normale" Ablauf im 
Verzeichnis des neuen Programms:
./configure      # Ermittelt ob alle Abhängigkeiten vorhanden sind
                 # und bereitet das Makefile für Deine Umgebung vor

make             # Führt das Makefile aus (Kompilieren, Linken,...)

make install     # Installiert das Programm (Verteilt die fertigen
                 # Programmteile in den entsprechenden Verzeichnissen)

von Hector A. (h3ctor)


Lesenswert?

Vielen Dank für die vielen hilfreichen Infos!
Habe einiges dazugelernt.

Bezügl. "autorun":
Liegt der Ordner "cd lol_dht22" aus dem obigen Link wirklich im root 
Verzeichnis?

Normalerweise müsste es doch reichen, wenn ich in der rc.local folgendes 
reinschreibe:
"lol_dht22/loldht"

Wenn ich dies allerdings in Putty so reinschreibe, dann startet das 
Programm nicht. Ich muss entweder in das Verzeichnis wechseln (mit "cd 
loldht22") und dann das Programm mit "./loldht" starten oder
direkt "./lol_dht22/loldht" zum Starten eingeben.

Für mein Verständnis wäre doch "lol_dht22/loldht" der absoluste Pfad, 
oder nicht?

Danke für euer Wissen und eure Hilfe!
Finde das Forum hier super, weil echt gute Leute unterwegs sind!

von Blinky (Gast)


Lesenswert?

Hallo,

mit "cd lol_dht22" wechselst Du im aktuellen Verzeichnis in das 
Unterverzeichnis lol_dht22.

Der Absolutpfad gilt immer vom Root Verzeichnis "/".
Wenn Du im Verzeichnis des Programms bist, dann gib den Befehl "pwd" 
ein. Damit siehst du den absoluten Pfad den Du brauchst.

Hier zum Vergleich:

cd /home/user           # Wir fangen im Home Verzeichnis an
/test/xyz               # Datei xyz im Verzeichnis /test
test/xyz                # Datei xyz im Verzeichnis /home/user/test
./test/xyz              # wie test/xyz
../test/xyz             # Datei xyz im Verzeichnis /home/test

von Markus C. (ljmarkus)


Lesenswert?

schriebe doch in die /etc/rc.local folgends ganz unten:

/xxxxx/yyyyy/programm

dann wird es auch ausgeführt.

von Hector A. (h3ctor)


Lesenswert?

Danke euch! Jetzt hab ichs verstanden.

Als Windowskind bin ich doch etwas verwöhnt und mit den detailierten 
Angaben nicht so vertraut! :-)

Ich probiers heut am Abend nochmal aus und sag euch Bescheid!!! DANKE 
auf jeden Fall!

von linuxianer (Gast)


Lesenswert?

Markus C. schrieb:
> schriebe doch in die /etc/rc.local folgends ganz unten:
>
> /xxxxx/yyyyy/programm
>
> dann wird es auch ausgeführt

und schreibe noch ein & dahinter, sonst bleibt der Init-Prozess an der 
Stelle stehen! Also so:

/xxxxx/yyyyy/programm &

von Hector A. (h3ctor)


Lesenswert?

Danke euch allen! Funktioniert einwandfrei!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.