Script zeitgesteuert starten

  • Hallo Experten,

    habe mit einem RPiZero W, einem TSL2561 Sensor und solid state relais eine

    Lichtsteuerung gebaut, die schlussendlich mit dem Script <tsl2561.py> funktionierte,
    aber seit kurzem plötzlich nicht mehr.


    Meine Absicht ist, das Script per crontab jeden Tag zu einer bestimmten Zeit

    neu zu starten, in welchem die Sequenz der Ein- und Ausschaltvorgänge nach

    Unterschreiten eines Helligkeitsschwellenwertes ausgelöst und nach
    Ablauf per <break> beendet wird.


    Zur Fehlersuche habe ich aus meinem Script <tsl2561.py eine "abgespeckte" Version

    erstellt (<tsl2561_test.py>, im Dateianhang) , die aber auch nicht ausgeführt wird, die

    erste loggin.info erschein nicht in der dafür vorgesehenen Datei (mylog1.log).


    Ich verstehe nicht, warum Scripts, die ich zum Aufbau benutzte per crontab

    (siehe unten, per # inaktiviert) korrekt ausgeführt werden, <tsl2561_test.py> und das

    eigentliche Script <tsl2561.py> aber nicht:

    Wenn ich diese beiden Scripts direkt mit <python3> ausführe geht's.

  • Kannst du bitte das Skript, welches nicht funktioniert hier posten. Bitte nicht als Anhang sondern in Code Tags


    Zur Fehlersuche habe ich aus meinem Script <tsl2561.py eine "abgespeckte" Version

    erstellt (<tsl2561_test.py>, im Dateianhang) , die aber auch nicht ausgeführt wird,

    Ich verstehe nicht, warum Scripts, die ich zum Aufbau benutzte per crontab

    (siehe unten, per # inaktiviert) korrekt ausgeführt werden, <tsl2561_test.py> und das

    eigentliche Script <tsl2561.py> aber nicht:

    Funktioniert jetzt die test.py oder nicht. Du widersprichst dir hier selbst.

    • Official Post

    Hast Du das Skript ausführbar gemacht?


    Ob ein korrekter Shebang im Skript steht weiß ich allerdings auch nicht, weil ich am Telefon keine Dateianhänge öffne. Siehe dazu:

    Kannst du bitte das Skript, welches nicht funktioniert hier posten. Bitte nicht als Anhang sondern in Code Tags

  • In den Logfiles (sys/kern/auth) sollte der Grund für den vermutlichen Fehler sichtbar sein.


    Das Problem kann auch am User ich liegen, den es normalerweise nicht gibt.

    Wenn der User mit uid=1000 aus seinem Terminal ein Script ausführt, das funktioniert, macht er das mit seinen Gruppenrechten und seinem Environement (Umgebungsvariablen), sodass sinvollerweise auch die crontab des Users mit uid=1000 verwendet werden sollte. Ausserdem sollen crontabs von Amateuradmins nie direkt editiert werden, sondern mit dem criontab Programm, das mit der Option -e den Editor mit der richtigen crontab aufruft.

    < crontab -e > läd die crontab des aufrufenden Users zum Editieren.

    < sudo crontab -e > die crontab des Systemusers root, uid=0


    Interessant wäre auch, was Du geändert hast, bevor plötzlich das Script nicht mehr funktionierte. Hast Du garnichts geänder und auch kein Update durchgeführt, käme allenfalls auch ein teilweise korruptes Filesystem in Betracht, das mit dem syslog Eintrag "check filesystem manually" im Bootprozess sichtbar wird.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • vielen Dank ! Ich post mal mein Test Script <tsl2561_test.py>. Das "eigentliche"

    Script <tsl2561.py> hat über 100 Zeilen und unterscheidet sich vom Test Script

    nur in den Schaltzeiten:


  • ja, alle erwähnten Scripts sind ausfürbar:


    Code
    -rwxr-xr-x 1 root root   697 Sep 20 16:14 relais_test.py
    -rwxr-xr-x 1 root root   767 Oct 16 21:28 sensor_tsl2561_test.py
    drwxr-xr-x 2 pi   pi    4096 Mar  5  2021 Templates
    drwxr-xr-x 8 root root  4096 Apr  5  2021 TSL2561
    -rwxr-xr-x 1 root root  4048 Oct 16 14:23 tsl2561.py
    -rwxr-xr-x 1 root root  3344 Sep 17 16:33 tsl2561.py.save
    -rwxr-xr-x 1 root root  2352 Oct 17 19:58 tsl2561_test.py
  • ...bin ein hobbyist und in Linux/Raspbian alles andere als sattelfest.

    Ein Hinweis wie ich es bessr machen oder lernen könnte wäre mir

    zweckdienlicher als ein Kopfschütteln.

  • Ein Hinweis wie ich es bessr machen oder lernen könnte wäre mir

    zweckdienlicher als ein Kopfschütteln.

    Das war der Hinweis: im Homeverzeichnis des Users pi hat root nichts verloren.

    [Es ist auch garnicht einfach Files des Users root im Homeverzeichnis des Users pi anzulegen]


    Servus !

    RTFM = Read The Factory Manual, oder so

  • bestens, (ziemlich) alles klar.


    Eine system service unit für mein definitives Script <tsl2561.py> kann ich

    ja wohl nicht eirichten, erstere würde mein Script ja nur einmal, beim

    Start des RPi ausführen. Das Script muss aber täglich von neuem

    während meiner Abwesenheit gestartet werden und zwar vor Erreichen

    des Helligkeitswertes <Visible 100> über's Jahr.


    Über eine systemd timer service unit genüber einem cronjob wurde auf

    diesem Forum anderenorts dikutiert. Es gibt offenbar keinen Vorteil.


    Schedule werde ich sofort einrichten. :):danke_ATDE:

  • Eine system service unit für mein definitives Script <tsl2561.py> kann ich

    ja wohl nicht eirichten, erstere würde mein Script ja nur einmal, beim

    Start des RPi ausführen

    eine Systemd Service Timer Unit verwenden.

    Mit dem Timer, kannst du bestimmen, wann dein Skript gestartet werden soll.

    Über eine systemd timer service unit genüber einem cronjob wurde auf

    diesem Forum anderenorts dikutiert. Es gibt offenbar keinen Vorteil.

    Das mag vielleicht für einen bestimmten Fall gelten (?) :conf:

    Ich bin auf mehr Infos/Belege gespannt.



    Grüße

    Dennis

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

    • Official Post

    Ich bin auf mehr Infos/Belege gespannt.

    Beides hat seine Berechtigung. ;)


    Default und (für jeden überprüfbar) ist z.B. /etc/crontab:

    Als Beispiel daraus:

    und wiederum ein Beispiel daraus:

  • [Es ist auch garnicht einfach Files des Users root im Homeverzeichnis des Users pi anzulegen]


    Das passiert Anfängern andauernd. Da ist nichts Schwieriges dran.

    Mit dem User pi einloggen, mit su nach root umloggen und dann Dateien erstellen.


    Das Eigentliche schwierige ist, es sich das wieder abzugewöhnen.

  • Schlimmer und wahrscheinlicher ist das immer und überall gern und sinnfrei genutzte sudo. Hier wahrscheinlich sudo nano foo

    Menschen die keine Ironie verstehen finde ich super!

  • Das passiert Anfängern andauernd. Da ist nichts Schwieriges dran.

    Mit dem User pi einloggen, mit su nach root umloggen und dann Dateien erstellen.

    In 2 von den 3 möglichen Fällen landest Du im Homeverzeichnis des Users root, also /root/


    Mit "sudo nano foo" landet der aufrufende User im Homeverzeichnis des aufrufenden Users. Das erklärt aber nicht das Verzeichnis /TSL2561/


    ad TO:

    Anfänger sollten nie die cron Configs (crontab), von denen es mehrere gibt, direkt bearbeiten, sondern mit dem dafür vorgesehenen crontab Programm. So stehts auch im offiziellen Beitrag von https://forums.raspberrypi.com/viewtopic.php?f=91&t=314455 unter 4.3. Using Cron des Download File boot.zip [ https://forums.raspberrypi.com/download/file.php?id=47693 ]


    Fehler in Systemprogrammen, wie auch cron selbst, werden in den Logfiles (hier sys*, auth*) erfasst. Siehe #4 (von dem die letzte Frage noch unbeabtwortet ist))


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Mit "sudo nano foo" landet der aufrufende User im Homeverzeichnis des aufrufenden Users. Das erklärt aber nicht das Verzeichnis /TSL2561/

    Warum verbreitest du einen solchen Unsinn?

    sudo nano foo  erstellt die Datei foo im $PWD sofern sie nicht schon existiert. Ansonsten wird sie bearbeitet.

    Und wenn /TSL2561/ $PWD ist, eben dort.

    Menschen die keine Ironie verstehen finde ich super!