Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. CRON Regel wird ausgeführt obwohl Skript inaktiv

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    CRON Regel wird ausgeführt obwohl Skript inaktiv

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      romann.k last edited by romann.k

      Hallo zusammen,

      ich habe mir über ein paar Blockly Scripte eine Anwesenheitssimulation zusammengeworfen. Ein permanent aktives Skript überwacht die Anwesenheit bzw. Geofences und aktiviert ggf. die eigentlichen Skripte, die die Anwesenheit simulieren. Das läuft auch zuverlässig.

      In den Skripten für die Simulation lasse ich zu einer bestimmten Zeit am Tag CRON-Regeln mit Zufallsanteil für abends und nachts anlegen die dann durchlaufen sollen, sofern die Skripte aktiv bleiben.

      Wenn wieder jemand Zuhause ist deaktiviert das permanent aktive Skript die Skripte, die die Simulation laufen lassen und stellt alle Werte auf default.

      Jetzt ist mir (seit kurzem) etwas merkwürdiges aufgefallen: Wird eine Cron-Regel z.B. für 19:00 angelegt und das Skript deaktiviert, dann wird der Cronjob trotzdem ausgeführt - also täglich um 19:00...

      Keine Ahnung ob das irgendein Basic ist was man wissen sollte, aber bisher hatte das immer so geklappt - also die Cronjobs wurden nicht mehr ausgeführt, nachdem das Script deaktiviert wurde.

      Ist das normal, dass die Cronregeln weiterlaufen obwohl das Skript deaktiviert wurde? Mir würde als Lösung nur spontan einfallen, den Trigger zur Deaktivierung der Skripte zur Simulation in die Skripte selbst zu packen (geht das überhaupt?) und vorher ein StopCron auszuführen. Oder kennt jemand eine einfachere Lösung?

      Finde es trotzdem merkwürdig, dass dieses Verhalten erst seit kurzem Auftritt. Bei unserem Urlaub im Juli 2022 lief nach unserer Rückkehr alles normal und die Cronjobs haben auch mit Deaktivierung der Skripte nicht mehr ausgelöst.

      Hat jemand eine Idee?

      Danke euch vorab!

      Thomas Braun 1 Reply Last reply Reply Quote 0
      • Thomas Braun
        Thomas Braun Most Active @romann.k last edited by

        @romann-k

        Zeig mal so ein Blockly. Hört sich für mich nach 'Trigger im Trigger' an.

        R 1 Reply Last reply Reply Quote 0
        • R
          romann.k @Thomas Braun last edited by

          @thomas-braun Zeigen wird schwer - das Ding ist gefühlt zwei Meter lang - aber du hast recht.

          Ich habe wenn das Skript aktiv ist eine Cron-Regel zu einer festen Zeit in der wiederum die Cron-Regel mit Dialog bzw. die Zufallszahlen generiert werden.

          Aber beide Trigger sind in dem inaktiven Skript und bisher hatte ich noch nie so ein verhalten.

          Thomas Braun 1 Reply Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @romann.k last edited by

            @romann-k

            Das kann dir @paul53 vermutlich besser erklären, warum 'Trigger im Trigger' selten eine gute Idee ist.

            R 1 Reply Last reply Reply Quote 0
            • R
              romann.k @Thomas Braun last edited by

              @thomas-braun 5a9dc57a-b22d-42de-81f6-39882f031b5d-image.png

              So in etwa.

              Aber wie kann ich dann täglich den Cronjob mit Dialog sonst bespielen ohne einen weiteren Cronjob zu nutzen?

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @romann.k last edited by

                @romann-k
                Bevor man einen Zeitplan innerhalb eines Triggers aktiviert, muss der laufende Zeitplan gestoppt werden.

                R 1 Reply Last reply Reply Quote 0
                • R
                  romann.k @paul53 last edited by

                  @paul53 Das meinte ich mit Zeigen wird schwer 😉

                  Das wird als erstes in der Aktion ganz oben gemacht. Also die Simulation selbst läuft auch ohne Probleme solange sie aktiv ist. Nur nachdem das Skript deaktiviert wird laufen die Cron-Regeln die in der Aktion gesetzt wurden mit den letzten Werten weiter.

                  4a27b0c0-204a-4022-8f12-bba52b9db0e8-image.png

                  R 1 Reply Last reply Reply Quote 0
                  • R
                    romann.k @romann.k last edited by romann.k

                    Also ich habs jetzt mal so gelöst, dass wenn die Anwesenheitssimulation auf false geht ich in den einzelnen Skripts allen Cron-Regeln über einen Trigger auf den Datenpunkt nochmal ein stop gebe und die Skripte dann mit einer Verzögerung von 5 Sek im "Masterskript" deaktivieren lasse.

                    Da scheint jetzt so zu klappen wie ich mir das vorstelle.

                    Aber merkwürdig ist das trotzdem. Zumal wie gesagt bis vor ein paar updates von javascript alles funktioniert hat.

                    Danke trotzdem für euren input dazu!

                    Thomas Braun 1 Reply Last reply Reply Quote 0
                    • Thomas Braun
                      Thomas Braun Most Active @romann.k last edited by

                      @romann-k sagte in CRON Regel wird ausgeführt obwohl Skript inaktiv:

                      Zumal wie gesagt bis vor ein paar updates von javascript alles funktioniert hat.

                      Das ist möglich, tw. ändern sich Dinge und Code der zuvor zwar unsauber war aber durchgewunken wurde wird jetzt strenger bewertet.

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        romann.k @Thomas Braun last edited by romann.k

                        @thomas-braun Aber ist es denn "sauber", dass Cron-Regeln in einem inaktiven Skript ausgeführt werden oder verstehe ich einfach die Logik dahinter nicht?

                        Thomas Braun 1 Reply Last reply Reply Quote 0
                        • Thomas Braun
                          Thomas Braun Most Active @romann.k last edited by

                          @romann-k

                          crons lauern im Hintergrund, die kannst du nicht einfach 'inaktivieren', indem das skript nicht durchlaufen wird.

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            romann.k @Thomas Braun last edited by romann.k

                            @thomas-braun Also verstehe ich das richtig, dass diese Cron-Regeln mit Dialog garnicht durch Javascript ausgeführt werden sondern irgendwo im Hintergrund im System durchlaufen?

                            Gibt es irgendeine Möglichkeit aktive Crons zu sehen? Du meintest ja man kann Crons nicht einfach so deaktivieren. Wie sonst soll man das denn können? Gibt es irgendeinen Linux Befehl den man senden kann damit alle Cron Regeln gelöscht werden? Das wäre dann ja auch eine Möglichkeit das zu bereinigen.

                            Das mit dem stop vor dem Deaktivieren der Skripts hat es auch nicht gebracht und bestimmte Cronjobs sind trotz stop noch gelaufen. Ich habe den Pi jetzt einmal komplett rebootet und hoffe das es heute Abend nicht wieder eine Lichtershow gibt.

                            Aber ehrlich gesagt kommt mir das irgendwie wie ein Bug vor. Ich kann mir beim besten Willen nicht vorstellen, dass das so gedacht ist. Ich verlasse mich bei anderen Triggern ja auch darauf, dass die mit dem Skript auch komplett deaktiviert sind und nicht noch in bestimmten Fällen weiter laufen.

                            VG

                            paul53 Thomas Braun 2 Replies Last reply Reply Quote 0
                            • paul53
                              paul53 @romann.k last edited by

                              @romann-k sagte: Möglichkeit aktive Crons zu sehen?

                              getSchedules(true)

                              Habe ich selbst noch nicht verwendet.

                              R 1 Reply Last reply Reply Quote 0
                              • Thomas Braun
                                Thomas Braun Most Active @romann.k last edited by Thomas Braun

                                @romann-k

                                Die cronjob dürften an crond übergeben werden.

                                https://wiki.ubuntuusers.de/Cron/

                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @Thomas Braun last edited by

                                  @thomas-braun sagte: Die cronjob dürften an crond übergeben werden.

                                  Das denke ich nicht. Der Javascript-Adapter verwendet das NPM-Modul node-schedule.

                                  Thomas Braun 1 Reply Last reply Reply Quote 1
                                  • Thomas Braun
                                    Thomas Braun Most Active @paul53 last edited by

                                    @paul53
                                    Okay.

                                    1 Reply Last reply Reply Quote 0
                                    • R
                                      romann.k @paul53 last edited by romann.k

                                      @paul53 Also ich glaube so langsam verstehe ich es.

                                      Das heißt wenn ich vor dem Beenden des Skripts in dem die Simulation läuft diese JS-Funktion durchlaufen lasse,

                                      const list = getSchedules(false);
                                      // hier muss ´false´ rein, weil ich nur die Crons in diesem Blockly-Skript zurück haben möchte, richtig?
                                      list.forEach(schedule => console.log(JSON.stringify(schedule)));
                                      list.forEach(schedule => clearSchedule(schedule));
                                      

                                      dann kann ich sicher sein das alle noch laufenden Crons in dem Skript erfasst und beendet werden, richtig? (Ich weiss, die dritte Zeile müsste nicht)

                                      Ich bin ehrlich, ich bin eine Niete in Informatik und Programmierung und suche mir immer alles für einen bestimmten Anwendungsfall raus und hoffe das Beste 😂 Also seht mir nach wenn ich einen Moment länger brauche bis der Groschen fällt und Danke für die Hilfe bis hierher!

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      527
                                      Online

                                      31.9k
                                      Users

                                      80.2k
                                      Topics

                                      1.3m
                                      Posts

                                      3
                                      17
                                      627
                                      Loading More Posts
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      The ioBroker Community 2014-2023
                                      logo