Temperaturlogging + webserver Problem cronjob

  • Hallo Gemeinde,


    ich habe es endlich geschafft 3x Sensoren(DS18B20) am Raspberry ans laufen zu kriegen. Diese werden zyklisch abgefragt per cronjob und die werte in eine RRD Datenbank gespeichert. Daraus wird dann auch zyklisch je sensor eine Grafik erzeugt, diese sind dann per Webserver einsehbar.


    Nun zu meinem eigentlichen Problem dem cronjob........................
    Ich habe 2x cronjobs eingetragen, einer für das speichern der temp werte(der erste) und der andere zum erzeugen der Grafiken, jedoch wird der zweite nicht ausgeführt.


    Code
    */5 * * * * php5 /root/sh/w1_to_rrd.php > /dev/null 2>&1
    */10 * * * * /root/sh/create_img.sh > /dev/null 2>&1


    Dass der erste funktioniert habe ich geprüft indem ich das änderungsdatum der *.rrd dateien angeschaut habe.
    Beim zweiten hatte sich dieses nicht geändert......ich kann die grafiken nur manuel erzeugen

    Code
    /root/sh/create_img.sh


    hat jemand einen tipp für mich :denker:

  • Was Morob65 damit sagen will, wenn du Probleme mit einem Script hast, dann poste den Inhalt. Warscheinlich wird die Shebang fehlen. (Ist das Programmauch ausführbar?).
    Wenn keine Shebang da ist, kannst du den interpreter auch manuell übergeben

    Code
    */10 * * * * /bin/bash /root/sh/create_img.sh > /dev/null 2>&1

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().


  • /bin/bash
    /bin/sh


    du meinst im eigentlichen skript ?


    das skript startet mit

    Code
    #! /bin/sh


    hier das skript


    ausführbar gemacht habe ich es mit

    Code
    chmod +x /root/sh/create_img.sh
  • Dann hau doch mal di eAusgabe in ein log file und schau rein an was er scheitert

    Code
    */10 * * * * /root/sh/create_img.sh >> /root/cron.log 2>&1

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • also die Datei wurde bisher nicht erstellt...................
    Ich habe mal die zeit heruntergesetzt

    Code
    */2 * * * * /root/sh/create_img.sh >> /root/cron.log 2>&1€

    jedoch ohne Änderung


    die Attribute sollten passen

    Code
    -rwxr-xr-x 1 root root 1985 Apr 15 20:08 create_img.sh
    -rwxr-xr-x 1 root root 899 Apr 15 13:06 w1_to_rrd.php
  • Nur weil ich da so bischen komisch bin, nimm das "nice" weg oder gib den Pfad mit an - so testhalber.

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.


  • Ich hoffe das €-Zeichen in deinem Post #6 im Cronjob ist nur hier passiert, nicht wirklich drin ;)


    doch war es ;) ..... nun wird die datei erstellt, jeodch ohne inhalt.


    Funktioniert das ganze denn manuell? Also das script einfach manuell ausführen in der Shell mit "/root/sh/create_img.sh >> /root/cron.log 2>&1"? Da wirst du auf Fehler ja sofort aufmerksam und musst nicht immer eine gewisse Zeit abwarten.


    ja manuell geht es auch, jedoch bleibt die Log datei auch hier leer...........
    [hr]
    was ich nun festegestellt habe, wenn ich die beiden skripte manuell starte führt er sie zwar aus..... jedoch werden keine aktuellen Temperaturwerte mehr übergeben. Die diagramme werden zwar neu erstellt, die Zeitachse verändert sich, jedoch fehlt der aktuelle Temperaturwert.
    Mittlerweile bin ich echt am Ende............... :helpnew:


    ich glaub ich setz das nochmal neu auf :(

  • ich habe mittlerweile alles nochmal neu gemacht und konnte das weiter eingrenzen.
    Als ich direkt mit Tastatur und Bildschirm drauf war gings. Jetzt habe ich ihn nur ans netzwerk gehängt und er spinnt wieder, das heißt die Grafiken werden erzeugt jedoch fehlen die gemessenen werte. Wenn ich einzeln in den devices schaue passt alles.


    Hängt das mit dem user vielleicht zusammen?

  • Wenn du genauer "mit dem user" spezifizierst!?
    Welcher user?

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Lade bitte BEIDE aktuellen Codes von dir hier mal rein und alle Befehle die du zum Ausführen genutzt hast. Gerne auch die Ausgabe die in der Shell kommt z.B.


    Sind die Messwerte denn da? Also zeigt das Script diese nur nicht an, oder wurden die mit dem 1. garnicht erfolgreich angelegt, wäre ja auch eine Möglichkeit. Natürlich könnte es am User liegen, dass kommt aber darauf an was du intern für Befehle ausführst. Nachdem der Code da ist kann man sicherlich mehr sagen.

  • im Moment läuft es seit ende letzter Woche problemlos......


    ich habe so eingestellt das er mit grafischer Oberfläche startet, user "pi" ist standardmäßig angemeldet. Dann bin ich mir jedoch nicht mehr 100% sicher ob ich die ganzen konfigurationen unter user "roto"gemacht habe.


    ich lade später mal den aktuellen code hoch........

  • *update*


    die geschichte läuft nun seit längerer Zeit stabil :bravo2:




    ich habe für jeden meiner Sensoren eine RRD Datenbank angelegt unter /root/rrd/

    Code
    root@(none):~/rrd# ls
    10-000802c34d2f.rrd  28-0004734d65ff.rrd  28-0004785595ff.rrd


    danach ein Script erstellt "w1_to_rrd.php" welches die Tempwerte der Sensoren abruft und in die Datenbank einträgt. Dieses liegt unter /root/sh/

    Code
    root@(none):~/sh# ls
    create_img.sh  w1_to_rrd.php


    und hat folgenden Inhalt


    nun ein weiteres Skript "create_img.sh" erstellt welches aus den gespeicherten werten Bilder erzeugt und diese im verzeichnis des webservers ablegt.
    Dieses liegt ebenfals unter /root/sh/

    Code
    root@(none):~/sh# ls
    create_img.sh  w1_to_rrd.php



    auch dieses Skript ausführbar gemacht und cronjob zum zyklischen ausführen erstellt.

    Code
    */10 * * * * /root/sh/create_img.sh > /dev/null 2>&1


    im Prinzip war es das, ist auch zu finden auf: http://www.linuxlinus.de/blog/…tation-ds18b20-rrd-graph/


    was mich nur unsicher gemacht hat, war dass ich eigentlich immer als root angemeldet war(als normaler user hat mein kein recht einen Ordner in /root/ zu erstellen) und die cronjobs hatte ich auch als root angelegt. Im normalfall ist der user bei mir pi und ich dachte das die cronjobs vom root user dann nicht ausgeführt werden.

  • Was reitet euch eigentlich wenn ihr PHP verwendet um darin Bash/Konsolen Befehle auszuführen? :s


    Also wenn ihr PHP verwendet dann macht das verarbeiten der Datei doch bitte mit PHP Befehlen, ohne exec('cat ...'); . Ansonsten könnt ihr PHP auch gleich ganz weg lassen und direkt ein Bash Script verwenden. Aber dieses gemixe ist verabscheuungswürdig und zudem langsamer.


    Um in bash (bzw der Konsole) mit Kommata-Stellen zu rechnen bedarf es einem extra Programm namens bc

    Code
    sudo apt-get install bc


    Und dann sähe ein bash Script zum Beispiel wie folgt aus:


    In PHP Sähe das wie folgt aus:



    Problematisch bei dem ganzen (auch schon bei Deiner Variante) ist allerdings das ein 1wire Sensor auch mal nicht Ready sein kann, was man dann am "NO" erkennen würde - deshalb wärs besser wenn man sicherstellen würde das in der ersten Zeile auch wirklich "YES" steht, also der Sensor auch Ready ist.
    Auch sollte man verifizieren dass das Auslesen erfolgreich war bevor man stumpf "rrdtool update" ausführt, denn sonst vermurkst man sich die Datenbank.

  • So...... nachdem ein Stromausfall meine Filesystem der SD Karte zersört hat habe ich wieder alles neu aufgesetzt und gleich auf nen USB Stick ausgelagert.


    Nun habe ich aber das problem dass die Grafik eines Sensors keine Werte enthält. Ich habe auch direkt im W1 device geschaut, dort passt alles

    Code
    pi@raspi4temp /sys/bus/w1/devices/28-0004734b48ff $ cat w1_slave
    6e 00 55 00 7f ff 0c 10 ad : crc=ad YES
    6e 00 55 00 7f ff 0c 10 ad t=6875


    entweder der Wert wird nicht in die Datenbank geschrieben oder das Skript für die Erstellung der Grafiken hat nen Schuss... ich konnte selbst aber keinen Fehler finden:


    w1_to_rrd.php zum schreiben der Werte in die Datenbank



    hat jemand eine Idee :daumendreh2: