Probleme mit Crontab, wird nicht ausgeführt

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich habe vor, mit einem Rpi Model B Temperaturen mittels 1Wire Sensor zu messen und alle 5 Minuten in eine RRD zu speichern sowie, ebenfalls alle 5 Minuten, Graphen erstellen zu lassen.
    Da der pi 24 Stunden, 7 Tage die Woche laufen soll habe ich folgendes Tutorial durchgearbeitet:
    http://tech-weblog.net/raspberry-pi-l…7-dauerbetrieb/
    Genauer gesagt Pi übertaktet, Memory Split verkleinert, watchdog aktiviert, und logs in der Arbeitsspeicher ausgelagert.

    Da die Temperaturgraphen im Netz verfügbar sein sollen habe ich dieses Tutorial durchgearbeitet:
    Raspberry Pi als Webserver - Apache 2 Installation
    (alles bis auf FTP-Server installation).

    Hier gibt es schonmal einen Fehler: der Apache startete nicht nach einem Neustart ohne logs. Also habe ich die Logs wieder aus dem Arbeitsspeicher geholt.

    Die Temperaturen hole ich mir so wie hier in dem Tutorial:
    http://webshed.org/wiki/RaspberryPI_DS1820

    In /home/pi/test habe ich einen ordner "out", sowie die drei Dateien
    "DS1820.rrd",
    "temp.sh" und
    "graph.pl".
    Alle Dateien sind 755 und haben als owner/guppe pi:pi!

    wenn ich jetzt alle minute (testweise) die scripte ausführen will per crontab:
    */1 * * * * /home/pi/test/temp.sh
    */1 * * * * /home/pi/test/graph.pl

    bekomme ich in /var/mail/pi die Fehlermeldung im Anhang angezeigt:
    /bin/sh: 1: /home/pi/test/temp.sh: not found
    /bin/sh: 1: /home/pi/test/graph.pl: not found

    Das komische ist, dass das ganze so schomal vor nem Jahr lief, mir dann allerdings die SD-Karte kaputtgegangen ist (crontab alle 5 minuten). Deswegen wollte ich zuerst die RRD und Graphen auf einen USBstick auslagern (/media/usbstick/), da gabs aber Probleme mit den Benutzerrechten...

    bin echt am verzeifeln, habe schon einiges versucht!!!

    Hier noch die scripte:


  • wenn ich jetzt alle minute (testweise) die scripte ausführen will per crontab:
    */1 * * * * /home/pi/test/temp.sh

    bekomme ich in /var/mail/pi die Fehlermeldung im Anhang angezeigt:
    /bin/sh: 1: /home/pi/test/temp.sh: not found

    Moin,

    versuche es mal mit:

    Code
    * * * * * /home/pi/test/temp.sh

    Dann wird es jede Minute ausgeführt.

    * = jede Minute/Stunde/u.s.w.
    Schreibweise */x .....
    Wenn´s alle x Minuten ausgeführt werden soll muss x grösser sein als 1
    Z. B. ALLE 2 Minuten */2 * * * *

    Bye

    Jürgen

    Einmal editiert, zuletzt von rpivpn (30. Dezember 2014 um 14:15)

  • Ob man " */1 " oder nur " * " nutzt ist relativ egal, wobei richtiger wäre " * "

    Die Fehlermeldung sagt ja ausserdem aus dass das Script ausgeführt wird - also ist der Crontabeintrag an sich im Ordnung. Wobei du leider nicht schreibst in welche Crontab du das eingetragen hast?


    Hast du die Scripts denn ausführbar gemacht?
    Das wäre nötig damit der Shebang überhaupt genutzt werden kann - denn sonst weiß Linux ja nicht welcher Interpreter den Code verarbeiten soll (bash oder perl , die Dateiendung spielt keine Rolle sondern kann man sogar weg lassen)

    Was passiert denn wenn du manuell in der Console das hier eingibst:

    Code
    /home/pi/test/temp.sh


    (bitte genau so eingeben, ohne davor was einzufügen!)

  • ich habe die crontab mit

    Code
    crontab -e

    aufgerufen. Ich habe es allerdings auch schon mit

    Code
    sudo /etc/crontab

    versucht und dann den root benutzer mit hinzugefügt. Hatte den Effekt, dass ich dann keine Nachrichten mehr an /var/mail/pi bekommen habe. Aber ausgeführt wurde auch da nichts.

    Die Scripts habe ich mit

    Code
    chmod -x temp.sh

    und

    Code
    chmod -x graph.pl

    ausführbar gemacht.

    Zitat

    Was passiert denn wenn du manuell in der Console das hier eingibst:
    Code: Alles markieren
    /home/pi/test/temp.sh
    (bitte genau so eingeben, ohne davor was einzufügen!)

    aha - Fehlermeldung:

    Code
    -bash: /home/pi/test/temp.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden



    sooo, habe mit google mal nach dem Fehler gesucht und bin darauf gestoßen:
    http://www.rainboxx.de/2010/01/tipps-…ad-interpr.html

    die temp-datei funktioniert nach der beschriebenen Änderungen schonmal.
    die graph-datei noch nicht.

    Wie kann ich dieses Problem in zukunft umgehen?? Ich schreibe die Dateien im "notepad++" und lade sie dann per "filezilla" auf den Pi hoch.
    Kann man dort irgendwie die Kodierung ändern und in was?

    :bravo2::bravo2::bravo2::D:D
    es FUNKTIONIERT :)

    Lösung:
    format zeilenende auf unix (LF)
    kodierung auf UTF-8 ohne BOM!

    Vielen Dank an alle!! :danke_ATDE::danke_ATDE:

    Einmal editiert, zuletzt von GrASShopper (30. Dezember 2014 um 15:49)

  • Hilfe kann nur so gut sein wie die Informationen die wir kriegen... Also bitte darauf achten das du das möglichst exakt so beschreibst wie du es auch gemacht hast


    Ich habe es allerdings auch schon mit

    Code
    sudo /etc/crontab

    So wie du es beschrieben hast wird das aber auch nichts - da fehlt die Angabe des Editors :)

    Aber ausgeführt wurde auch da nichts.

    Wie bereits festgestellt wurde, wird es durch aus ausgeführt, nur gibt es halt einen Fehler - entweder weil die Datei nicht gefunden wurde, oder weil der Inhalt der Datei fehlerhaft ist.

    Die Scripts habe ich mit

    Code
    chmod -x temp.sh

    und

    Code
    chmod -x graph.pl

    ausführbar gemacht.

    Das ist aber auch falsch. mit " -x " entfernst du die execute Rechte. Richtiger wäre " +x ".
    Siehe dazu: http://wiki.ubuntuusers.de/chmod


    aha - Fehlermeldung:

    Code
    -bash: /home/pi/test/temp.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

    Das deutet darauf hin das du die Datei im falschen Format gespeichert hast. Linux versteht nicht den Zeilenumbruch von Windows und zeigt deshalb ^M an.

    Wie kann ich dieses Problem in zukunft umgehen?? Ich schreibe die Dateien im "notepad++" und lade sie dann per "filezilla" auf den Pi hoch.

    Siehe oben.
    Der einfachste Weg sowas zu unterbinden ist die Datei direkt auf Linux zu erzeugen -> alte Datei löschen, mit nano neue Datei öffnen und dann den Code copy&paste einfügen, nano beenden und Datei speichern.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!