Python-Script mit Cron-Job ausführen

  • Hallo Forum,

    ich bitte um eure Hilfe. Ich habe mir ein python-Programm gestrickt, das ich mit einem Cron-Job auf dem Raspberry Zero (buster) ausführen will. Da ich aber das Script nicht direkt ausführen kann, muss ich definieren, mit was es ausführen werden soll. Und da hänge ich. Rechts-Click auf das Programm und es erscheint: Python (v3.7), Geany,Thonny Python IDE und andere Programme. Bei Python (v3.7) – passiert aber nichts. Auf einem anderen Raspberry hat es funktioniert, dass Python (v3.7) als Standard eingestellt wurde und damit das python-script im Cron-job ausgeführt wird.

    Was muss ich nachinstallieren?

    Grüße
    Andreas

  • Hallo,


    ich kann dir leider nicht ganz folgen. Die aktuellste Methode um automatische Programme zu starten habe ich hier beschrieben.

    Schaue dir auch die Links an.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Da ich aber das Script nicht direkt ausführen kann, muss ich definieren, mit was es ausführen werden soll.

    Dann musst du es ausführbar machen.

    Dazu nutzt man chmod.


    .....python-script im Cron-job ausgeführt wird.....

    Wie Dennis schon schrieb nutzt man systemd Service unit.


    Hier hast du eine sehr ausführliche Anleitung wie man eine service unit erstellt. Ist aber auf Englisch.

    Wenn du etwas nach Zeit und Datum ausführen möchtest nimmt man eine systemd service timer unit. Die Anleitung ist ebenfalls auf Englisch.

  • also wenn es per crontab -e ausgeführt werden soll, habe ich z.b.


    sudo nano crontab -e

    * * * * * * sudo php /var/www/html/smarthome/tele-stat.php


    und wenn ich ein Programm dauerhaft im Hintergrund laufen haben möchte dann

    sudo nano /etc/rc.local

    sudo python /433MHz/meinpy.py


    Lars

  • Hallo.


    MagicBird wenn du 'crontab' mit 'sudo' öffnest, musst du in deinem auszuführenden Befehl kein 'sudo' mehr mit angeben.

    'rc.local' geht schon fast in Richtung Steinzeit und sollte nicht mehr verwendet werden. Dazu gehören auch Programme die auf dem Pi mit 'python' anstatt mit 'python3' ausgeführt werden. Mit 'python' wird die Python2-Version aufgerufen und diese wird seit längerem nicht mehr durch die Entwickler unterstützt.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Hallo AndreasO,


    wenn das Skript mit Python 3.x ausgeführt werden soll, dann sieht der Cronjob, der in diesem Beispiel minütlich ausgeführt werden und als crontab -e erstellt würde, so aus:

    Code
    * * * * * python3 /Pfad/zum/Skript.py

    Beachte die 3 nach python!



    //Edit Wer lesen kann ist klar im Vorteil, hatte Dennis89 ja schon geschrieben.

  • //Edit Wer lesen kann ist klar im Vorteil, hatte Dennis89 ja schon geschrieben.

    Doppelt hält besser. Neben jedem Button hier im Forum sollte ein Hinweis auf Python3 stehen :daumendreh2::stumm:

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Jedes Programm, das gestartet werden soll, muss auch ausführbar sein.


    Die Ausnahme gilt für Scripts, die durch das ausführbare Programm abgearbeitet werden: Perl, PHP, Python, nodejs, usw.

    Diese können direkt über den jeweiligen ausführbaren Interpreter gestartet werden und das Script muss dazu nicht ausführbar sein.


    Zusätzlich bietet die Shell die Möglichkeit anhand des Shebang den passenden Interpreter zu finden, der sich im Pfad befindet.

    Aber dann muss auch das Script ausführbar sein.

    Code
    #!/usr/bin/env python3
    
    # weist die Shell an das Programm /usr/bin/env mit dem Argument python3
    # zu starten, das dann letztendlich das Programm selbst ausführt.

    Alternativ kann man den Interpreter auch direkt ohne env im Shebang adressieren,

    Python
    #!/usr/bin/python3
    
    ...


    Mit Shebang und Ausführungsrechte kann das Script ohne Angabe des Interpreters gestartet werden:

    Code
    ./programm.py
    
    # aber auch das geht
    python3 programm.py

    Das setzt voraus, dass der Shebang richtig gesetzt ist.


    Man kann sogar noch einen Schritt weiter gehen und die Dateiendung entfernen.

    Dann kann man das Modul aber nicht mehr in Python importieren.


    Viele Systemtools haben gar keine .py Dateiendung, sind aber Python-Programme.