Skript wird mit crontab (scheinbar) nur halb ausgeführt

  • Hallo,

    ich habe ein Skript auf meinem Raspberry Pi 3 geschrieben, welches die Temperatur ausliest und (unter anderem) die Daten in eine csv-Datei schreiben soll. Ich schreibe mit Thonny und wenn ich die Datei dort ausführe, wird wie gewünscht eine neue Reihe in die csv-Datei geschrieben.

    Wenn ich das Skript über crontab alle 5 Minuten ausführe wird allerdings keine neue Reihe in die csv-Datei geschrieben. Der Rest des Skipts (Daten auf thingspeak hochladen, Daten in txt-Datei schreiben) klappt alles.


    Hat jemand einen Tipp für mich woran es liegen könnte?


    Hier mein eintrag aus cronetab -e:

    */5 * * * * /usr/bin/python3 /home/pi/scipt.py


    Hier das script:

  • Hat jemand einen Tipp für mich woran es liegen könnte?

    Ja, in Zeile 49 verwendest du keinen absoluten Pfad.



    EDIT:

    Zusatztipp: Verwendet auch in Zeile 38-40 das with Statement um Datein zu lesen/schreiben.

    Zeile 43 würd sich leichter mit .format() zusammen setzen lassen(siehe Zeile 39)

  • Danke für eure Hilfe. Die eigentlich Datei liegt in einem Unterordner. Da habe ich das script für euch zum lesen "vereinfacht" ^^

    Eine csv-Datei wurde tatsächlich in /home/pi erstellt. Wenn ich das script mit Thonny starte wird sie allerdings im Unterordner, in dem auch die py-Datei ist, erstellt. Weird. Daher kam meine Verwunderung.

    Zusatztipp: Verwendet auch in Zeile 38-40 das with Statement um Datein zu lesen/schreiben.

    Habe ich gemacht. Aber warum genau ist das besser? ich schreibe doch in zeile 40 direkt save_file.close() dürfte das nicht auf's

  • Für mich wirkt es nunmal seltsam. Die py-Datei ist in /home/pi/ordner.

    Führe ich die Datei über Python3 mit Thonny aus, ist die csv-Datei in /home/pi/ordner

    Führe ich die Datei über Python3 über crontab aus, ist die csv-Datei in /home/pi


    Für mich weird. Du könntest mir ja erklären warum es so ist, dann wüsste ich es. Aber ein cooler Spruch tuts auch. Dann weiß ich es halt weiterhin nicht.

  • Ich rate jetzt einfach mal. Vermutlich setzt Thonny das aktuelle Verzeichnis (cd --help) vor der Ausführung des Skriptes und dieses wird dann eben benutzt. Crontab setzt vermutlich kein aktuelles Verzeichnis.

    Edited once, last by daxb: +s ().

    • Official Post

    Hallo Tillmario,


    with open ("temp.csv", "a") as csv_file: ist ein relativer Pfad (temp.csv). Die crontab setzt im homedir des Users an und führt das Script dort aus, in dem Fall pi. D.h. /home/pi. Somit wird, da relativer Pfad, die Datei auch dahin geschrieben.

    Wenn Du im Script absolute Pfade verwenden würdest, dann würde in der Datei dort auch geschrieben werden. Also fehlt in Zeile 49 nur der Pfad zur Datei with open ("/home/pi/ordner/temp.csv", "a") as csv_file: (ordner anpassen!) ;)


    Einfacher gesagt:

    - relativer Pfad (temp.csv)

    - absoluter Pfad (/home/pi/ordner/temp.csv)

  • Ich nehme an das auch Programm Ausgaben in eine Datei im $HOME angegebenen Verzeichnis landen? Also z.B. /pfad/zum/programm >>superlog.txt in der Crontab. So würde ich es jedenfalls erwarten.


    Zum Python Skript: Ich würde Dateipfade/URL/... auch in eine Variable packen und diese dann weiter benutzen.