NEWS
[Gelöst] JS-Skript - Schedule funktioniert nicht (mehr)
-
Ich habe ein kleines Skript (hier auf das wesentliche reduziert), dass in einem festen Zyklus aufgerufen werden soll (hier jede Minute)
function Heizung () { const THIS_SCRIPT = "TEST-SKRIPT - "; log (THIS_SCRIPT + "------------ CHECK SCHEDULE ------------", "info"); } schedule("0/1 * * * *", Heizung);
Wie ich festgestellt habe, klappt es mit dem "schedule" leider überhaupt.
Statt des Starts jede Minute läuft das Skript nur jede Stunde.
Das Skript selbst läuft schon seit langem und ist einstmals auch korrekt getriggert worden. Allerdings habe ich dieses Fehlverhalten erst jetzt zufällig über die Log-Einträge festgestellt: zur Zeit ist die Heizng nicht ganz so wichtig für das Wohlbefinden.
Was könnte sich geändert haben?
Mein System:
Admin 3.5.0
JS 3.6.4
Dieses Skript läuft in einer eigenen JS-Instanz (der zweiten)
-
in einem festen Zyklus aufgerufen werden soll (hier jede Minute) `
schedule("* * * * *", Heizung);
oder
schedule("*/1 * * * *", Heizung);
-
Ich würde
schedule("* * * * *", Heizung);
wegen der Lesbarkeit bevorzugen
Noch zur kurzen Erläuterung:
Der Schrägstrich kann ein mathematischen geteilt sein:
9/3 * * * * ````wäre mit```` 3 * * * * ````identisch. 0/1 sollte Null ergeben. Daher wird Dein Skript immer zur 0\. Minute ausgeführt. Der Schrägstrich kann aber auch als Intervallangabe verwendet werden:
*/5 * * * *
bedeutet das das Skript alle 5 Minuten ausgeführt wird. Entsprechend wird bei
*/1 * * * *
das Skript jede Minute ausgeführt. Daher kann man auch gleich
-
Ich muss zugeben, dass das Intervall 1 Minute leider etwas ungeschickt war. Da kam das Probölem selbst nicht klar genug heraus.
Der Schrägstrich kann ein mathematischen geteilt sein:
9/3 * * * *
wäre mit
3 * * * *
identisch. `
Das ist so nicht korrekt.
Die genaue Definition des Intervall bedeutet hier:
Start zur Minute 9 und dann alle drei Minuten. Dies wird auch im Skript so angegeben: einfach mal oben CRON antippen und dann den Ausdruck eingeben. Damit würde zur Minute 3 und 6 kein Trigger kommen.
Die echte CRON-Syntax ist jedoch in diesem Fall etwas anders https://de.wikipedia.org/wiki/Cron#Beispiele
Danach muss es
1-59/2 * * * * ````heißen. Also zwischen Minute 1 und 59 triggere alle 2 Minuten. Und siehe da: der JS-Adapter macht es nun genau richtig. Fazit: Die im JS-Adapter vorgeschlagene Syntax ist (teilweise) leider falsch.
-
Nachtrag:
Ich habe gerade festgestellt, dass die CRON-Einstellungen der Adapter auf der Instanzen-Seite zum gleichen Verhalten führen.
Dort fiel es mir bislang nicht auf, da die betroffenen Adapter bei mir nur der Anzeige dienen und ich sie natürlich nicht dauernd überwacht habe.