Komisches aufzeichen von .log

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

    glaube vor einigen Monaten schon mal gefragt zu haben, weiss aber leider nicht mehr wo der Beitrag zu finden ist.

    Problem:

    Ich habe ein Python script, das lauft wunderbar, aber in die .log Datei schreibt es pro sec. bis zu 14x, obwohl das script eigentlich nur alle 60 sec. abgearbeitet wird.

    Ist da Grundsäzlich was falsch?

    Warum loged es pro durchgang nicht nur 1x?

    Das script wird mit systemd gestartet und läuft zuverlässig.

    Gruss und Danke

    gwaag

    Einmal editiert, zuletzt von gwaag (23. März 2023 um 17:17)

  • Da der Rest vom Code fehlt, kann man das schlecht sagen.

    Möglicherweise hast du ganz viele if-Bedingungen nacheinander und ein paar Bedingungen sind erfüllt.

    Code
    if True:
        print("Bedingung 1 erfüllt")
    
    if True:
        print("Bedingung 2 erfüllt")

    Beide Bedingungen sind wahr und beide Bedingungen führen Code aus.

    Wenn man das so nicht will, sollte man mit if ... elif arbeiten.

    Code
    if True:
        print("Bedingung 1 erfüllt")
    elif True:
        print("Bedingung 2 erfüllt")

    Nur der erste Block wird ausgeführt, der zweite nicht.

  • Ja es sind einige if Bedingungen im code, aber es kann jeweils nur eine wahr sein.

    Wenn

    Code
      if winter and einspeisung >= -1200 and einspeisung < -0 and Ledw_ein:

    wahr ist, fuehrt es etwas aus, und es wird gelbw gelogged, aber warum in der selben 1 Sekunde bis zu 14x?

  • Hallo,

    sind die Zeile 41-45 richtig eingerückt? Wenn ja macht die for-Schleife in den Zeilen 38/39 wenig Sinn, in der über die Werte iteriert wird, ohne das irgendwas damit gemacht wird. Wenn da in Wirklichkeit eine Einrückung ist weißt du, woher die Logeinträge kommen, wenn `points` mehr als einen Punkt hat.

    Zeile 37 und 41 sind in gezeigtem Code wenig sinnvoll bzw. überflüssig.

    Wenn das Skript nur 1x pro Minute laufen soll würden ich das eher über eine systemd Timer Unit machen. Wäre auch robuster, falls das Skript mal crasht.

    Wenn das Skript weiter in einer Dauerschleife laufen soll dann solltest du zumindest die Konfiguration des Loggings und das Instanzieren der DB-Verbindung vor die Dauerschleife nehmen.

    Gruß, noisefloor

  • glaube vor einigen Monaten schon mal gefragt zu haben, weiss aber leider nicht mehr wo der Beitrag zu finden ist.

    Der: Mein script loggt ca. jede Minute ?

    Btw. Deine erstellten Themen findest Du hier: https://forum-raspberrypi.de/forum/user-thr…st/13642-gwaag/ ;)

  • Sowas meinte ich:

    In diesem Fall werden alle Bedingungen ausgeführt.

    Hier wird ausschließlich die erste Bedingung ausgeführt (sofern True), obwohl alle anderen Bedingungen auch wahr sind.

    Wenn du viele unterschiedliche Bedingungen hast, die möglicherweise zur gleichen Zeit wahr sind und kein elif verwendest, so werden diese Bedingungen auch ausgeführt.

    Es kann natürlich auch an einer falschen Einrückung liegen. Ich rate nur.

  • Wie @DeaD_EyE schon schrieb: Du solltest elif nutzen um mehrfaches Matchen zu verhindern. Dadurch kommen die mehrfachen Ausgaben. Auch wuerde ich ein

    Code
    if sommer 
       if ...
          .....
    else # winter 
       if  ...
           .....

    nutzen. Das liest sich leichter und besser ;)

  • sommer und winter könnten eigene Bedingungen sein.

    Das Problem ist das, was ich vermutet habe. Es können mehrere Bedingungen zutreffen, was zu den Logging-Einträgen führt.

  • Habe jetzt die script angepasst.

    Script WP-Steuerung is jetzt eigentlich ok, Script PV-Licht ist etwas besser geworden, logged aber immer noch das Gleiche 5-6x obwohl der Eintrag alle 60 sec nur 1x erfolgen sollte .

    Habe mal die Files angehaengt, ev habe ich ja noch was nicht richtig verstanden und es ist immer noch etwas falsch.

    Danke und Gruss

    gwaag

  • Hallo,

    hatten wir da nicht schon mal so ein Problem, dass da mehrere Skripte gleichzeitig gelaufen sind?

    Wie startest du die? Bitte das System-Unit oder den Crontab-Eintrag hier im Code-Block zeigen.

    Wäre auch schön wenn man die Skripte nicht immer herunter laden müsste.

    Konfiguriere deine Logeinträge einmal vor der Schleife und nicht in jedem Durchgang.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ja das hatten wir schon mal. Habe aber vor langer Zeit die Logs separat, pro script gemacht.

    Hier die beiden System-Units ( Mit systemctl status, laufen beide.)

    Crontab-Einträge gibt es nicht.

    " Konfiguriere deine Logeinträge einmal vor der Schleife und nicht in jedem Durchgang."

    Das verstehe ich nicht, wie muss ich das machen?

    Danke

    gwaag

  • Du startest eine Schleife und dann nach dem 'sleep' konfigurierst du in jedem Durchgang dein Logging. Die drei Zeilen kannst du vor die Schleife setzen.

    Ich denke zwar nicht, dass das das Problem löst, aber es ist unnötig in jedem Durchgang das Logging neu zu konfigurieren. (Und noch einiges mehr, aber das reicht mir gerade nicht)

    Wenn ich dein Skript nehme und die ganzen Abfragen rauswerfe und die Schleife mit dem Log-file-schreiben laufen lasse, dann kann ich dein Verhalten nicht nachstellen. Ich denke der Fehler ist "im" System zu suchen. Da müssen sich dann aber andere zu Wort melden.

    Viel Erfolg

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Macht immer noch zu viele Einträge.


  • So, jetzt gehts.

    Habe die Schleife raus, und alles wieder richtig eingerückt, und starte jetzt das script mit crontab -e, jede Minute.(später wird das noch in Timer Unit geändert)

    Log zeigt jetzt Eintrag pro Ereignis nur noch 1x pro minute.

    Danke an alle.

    Gruss

    gwaag

Jetzt mitmachen!

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