ubuntuusers.de

Skript als Daemon/background (Mysql logger) [Anfängerfragen/Verbesserung]

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

dertester

Anmeldungsdatum:
4. Juni 2012

Beiträge: Zähle...

Hi,

ich hab seit ein paar Tagen meinen Raspberry und jetzt auch Ubuntu als OS.

Ich habe folgendes Skript geschrieben:

test.sh gibt ausgabe von dht in variable und checkt ob richtig ist (längere ausgabe) und schreibt in MYSQL.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
size=0
while [ $size -le 50 ]
do
        test=$(dht 11 4)
        time=$(date +%s)
        size=${#test}
        temp=${test:$size-17:2}
        humidity=${test:$size-4:2}
        echo "nope"
        if test $size -ge 50; then
                echo "$size"
                echo "$time"
                echo "$temp"
                echo "$humidity"
                echo "INSERT INTO test (time,temp,humidity) VALUES ('$time', '$temp', '$humidity');" | mysql -uxx -pxx xx;
        fi
        sleep 1
done

#!/bin/bash

Die while nutze ich eigentlich um die falschen Messwerte (nope) solange zu wiederholen bis ich ergebnisse habe. Habe es aber derzeit zweckentfremdet um einfach einen loop zu haben.

Fragen:

1)Ist es effektiver das Skript alle x minuten mit watch oder cronjob aufzurufen und einmal durchlaufen zu lassen oder zu Systemstart zu starten und eben einen endlosen Loop mit sleep zwischen den Messungen zu nutzen? Oder gibt noch bessere Möglichkeiten?

2)Das Skript erfordert sudo (für das dht commando), was müsste ich beachten wenn ich es in den Systemstart legen möchte?

3)Wie kann ich das Skript im Hintergrund ausführen und laufen lassen? Hab schon "sudo ./test.sh &" probiert, bzw "watch -n5 sudo ./test.sh &" aber das funktioniert nicht so richtig. Ich bekomme immer noch ab und an die Ausgaben in mein Terminal und beim abmelden (bin per ssh auf dem PI) stirbt das Skript.

4)Sonstige Vorschläge? Ich möchte gerne was lernen und das war jetzt einfach mein erster Test bei der ganzen Sache.

Zum Projekt: Der Pi soll die Temperatur in nem Intervall (zwischen alle 10s bis 5min) loggen und ich möchte es später mit jpdraw in einer Webseite ausgeben.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

dertester schrieb:

1)Ist es effektiver das Skript alle x minuten mit watch oder cronjob aufzurufen und einmal durchlaufen zu lassen oder zu Systemstart zu starten und eben einen endlosen Loop mit sleep zwischen den Messungen zu nutzen? Oder gibt noch bessere Möglichkeiten?

Nimm cron. Der ist genau für so etwas gemacht. Wenn Dein Skript dauerhaft laufen soll, musst Du selber sicherstellen, dass es wieder gestartet wird, falls es abbricht usw. Das alles brauchst Du mit cron nicht.

2)Das Skript erfordert sudo (für das dht commando), was müsste ich beachten wenn ich es in den Systemstart legen möchte?

Dann läuft es doch sowieso schon als "root". Wozu dann noch sudo?

3)Wie kann ich das Skript im Hintergrund ausführen und laufen lassen? Hab schon "sudo ./test.sh &" probiert, bzw "watch -n5 sudo ./test.sh &" aber das funktioniert nicht so richtig. Ich bekomme immer noch ab und an die Ausgaben in mein Terminal und beim abmelden (bin per ssh auf dem PI) stirbt das Skript.

Man muss gar nicht weit gehen um eine Antwort dazu zu finden.

4)Sonstige Vorschläge? Ich möchte gerne was lernen und das war jetzt einfach mein erster Test bei der ganzen Sache.

Muss mir das Skript ersma in Ruhe anschauen.

Ciao

robert

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

dertester schrieb:

4)Sonstige Vorschläge? Ich möchte gerne was lernen und das war jetzt einfach mein erster Test bei der ganzen Sache.

  • Das "echo nope" würde wohl besser in einem else-Zweig vom if-Statement passen.

  • Du berechnest "temp" und "humidity" auch, wenn gar keine Werte anliegen. Also besser in den if-Teil packen.

  • Generell ist Extraktion von Teilen der Ausgabe von dht oder anderen Programmen robuster, wenn man es mit Mustern macht und nicht über Indexe wie in Zeilen 7 und 8.

  • Generell ist die Struktur seltsam: Die Schleife läuft ja nur, bis der erste Wert da ist. Da kann man sich dann den doppelten Test in Zeile 10 sparen und die Zeilen 11 bis 15 einfach hinter die Schleife packen.

Hilft das?

Ciao

robert

Antworten |