NEWS
CRON Regel wird ausgeführt obwohl Skript inaktiv
-
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!
-
Zeig mal so ein Blockly. Hört sich für mich nach 'Trigger im Trigger' an.
-
@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.
-
-
So in etwa.
Aber wie kann ich dann täglich den Cronjob mit Dialog sonst bespielen ohne einen weiteren Cronjob zu nutzen?
-
@romann-k
Bevor man einen Zeitplan innerhalb eines Triggers aktiviert, muss der laufende Zeitplan gestoppt werden. -
@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.
-
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!
-
@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.
-
@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?
-
crons lauern im Hintergrund, die kannst du nicht einfach 'inaktivieren', indem das skript nicht durchlaufen wird.
-
@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
-
@romann-k sagte: Möglichkeit aktive Crons zu sehen?
Habe ich selbst noch nicht verwendet.
-
-
@thomas-braun sagte: Die cronjob dürften an crond übergeben werden.
Das denke ich nicht. Der Javascript-Adapter verwendet das NPM-Modul node-schedule.
-
@paul53
Okay. -
@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!