cronjob phyton skript ausführen geht nicht

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo, ich habe nen Versuch gestartet ein Pythonskript über cronjob -e jede Minute ausführen zu lassen, bis jetzt ohne Erfolg.

    diese Anleitung habe ich schon mal versucht:
    Crontab + Python Script

    Mein Python liegt unter
    /usr/bin/ python


    darum habe ich in Pythonskritpt test.py folgendes Eingetragen:

    #!/usr/bin/ python
    # -*- coding: utf-8 -*-

    print "Hallo"[/color]

    dann habe ich dem test.py noch sudo chmod 777 test.py die Rechte gegeben.

    In crontab -e steht.

    * * * * * python /home/pi/test.py

    ebenfalls schon versucht

    */1 * * * * python /home/pi/test.py

  • #!/usr/bin/ python
    -------------^
    Wieso ist immer ein Leerzeichen zw. / und python? Wirklich so oder nur im Post

  • Und wo soll dir das print angezeigt werden :s

    crontab läuft über einen anderen Benutzer - um es simpel auszudrücken. Die Ausgabe des Script kann dir also nicht in deiner Konsole ausgegeben werden. Wenn dann musst du die Ausgabe umleiten zum Beispiel so:

    Code
    * * * * * /usr/bin/python /home/pi/test.py > /tmp/bla

    Bei jeder Ausführung wird die Datei /tmp/bla mit der Ausgabe des Scripts überschrieben.

    Bin mir sicher dass das Script durch aus ausgeführt wurde. Nur dieser Umstand mit der Ausgabe wurde nicht bedacht.
    Ob crontab (bzw CRON) das Script ausgeführt hat steht übrigens im Logfile /var/log/syslog

  • /usr/bin/env python

    ist etwas anderes als

    /usr/bin/python


    /usr/bin/env ist ein Programm an welches ein Parameter übergeben wird: python
    Dadurch wird auf dem jeweiligen System das entsprechende Programm mit korrektem Pfad ausgeführt - was nämlich nicht auf allen Linux Systemen identisch ist. Sorgt also für systemübergreifende Kompatibilität.

    "/usr/bin/ python" gibt es aber nicht, das Leerzeichen macht das ganze kaputt.

  • Danke meigrafd,

    jetzt läufts, war mir nicht bewusst dass es weitergeleitet werden muss,

    also hier der Weg zur Lösung, zum Cronjob nach 1 Minute ausführen.

    Pythonskritpt schreiben und schauen in welchem Verzeichnis es liegt,

    #!/usr/bin/ python (bei mir direkt nach /bin, oft in /usr/bin/env)
    # -*- coding: utf-8 -*-

    print "Hallo"

    danach mit
    sudo chmod 777 test.py dem Skript Rechte geben.

    nun in crontab -e

    (zuerst den Pfad von dem Auszuführenden Programm angeben danach den Pfad von der Datei und dann über >> angeben wo es hingeschrieben werden soll, da cronjob nicht direkt in den Terminal ausführt ;-))

    * * * * * /usr/bin/python /home/pi/test.py >> /home/pi/testdatei.txt

    Danke für die schnelle Hilfe.
    :thumbs1:

    also in dem test.py

    steht aber #!/usr/bin/ python und es läuft, keine Ahnung aber es geht

    Einmal editiert, zuletzt von mayrst (23. April 2015 um 22:18)

  • Bei cronjobs gilt immer: Am sichersten ist man mit absoluten Pfaden. D.h.
    1) Entweder /usr/bin/python und nicht python um ein Python Programm aufzurufen
    2) In Deinem Python Script

    Python
    #!/usr/bin/python

    reinschreiben am Anfang und dann mit /home/pi/test.py aufrufen
    3) Hier nachlesen was es sonst noch für Alternativen gibt

  • Hi jetzt hab ich nochmal eine Frage,
    wollte jetzt dass mir das Datum und die Uhrzeit noch angezeigt wird, dann hab ich in
    crontab -e folgendes eingegeben:

    * * * * * /usr/bin/python /home/pi/thermometer_csv_sm.py >> /home/pi/tempwerte/"$(date +'\%m.\%d\%y'.txt)"

    und jetzt wird die Datei tempwerte.txt nicht mehr angelegtls

  • ne war leider nicht die Lösung,
    ich hab in crontab -e eingegeben:
    * * * * * /usr/bin/python /home/pi/thermometer_csv_sm.py >> /home/pi/tempwerte$(date +'\%m.\%d\%y'.txt)


    unter pi: ls kommt dann
    tempwerte04.2315.txt als Datei mit nur den Temperaturwerten wenn ichs öffne

    also wenn du mit tuedelchen " " meintest

    Einmal editiert, zuletzt von mayrst (23. April 2015 um 23:05)

  • Noch mal zur Klarstellung:

    ENTWEDER man übergibt den Code direkt dem Interpreten, also dem Verarbeiter, also Python.
    ODER man setzt einen Shebang und macht die Datei ausführbar.

    Beides zu machen ist Quatsch.

    Desweiteren ist Dein Shebang immer noch falsch. Es gibt kein /usr/bin/ python
    Das Leerzeichen zwischen /usr/bin/ und python muss da weg!!!
    Ich hab dir oben schon erklärt das /usr/bin/env ein Programm ist. Das ist wie "ls" was auch ein Programm ist und "-la" wäre ein Parameter also " ls -la " oder eben nur "ls" was aber nicht das selbe macht wie ls -la.

    Desweiteren versteht "date" nicht was es mit .txt anfangen soll. Du möchtest die Rückgabe des 'date' Befehls nutzen, also halte dich bitte an die korrekte Syntax! Die Prozentzeichen zu maskieren versteht 'date' ebenfalls nicht was es damit aufsich hat und ist zudem ebenfalls Quatsch.
    Also wenn dann: /home/pi/tempwerte$(date +'%m.%d.%y').txt

    Bitte Lesen und Verstehen - nicht einfach nur blind copy&paste

Jetzt mitmachen!

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