CronExpression zwischen bestimmten Zeiten ausführen (aber nicht zur vollen Stunde)

271
elspoono

Ich habe hier einige Fragen zur Konfiguration von CronExpressions gesehen. Alle scheinen jedoch genaue Stunden (keine Minutenangabe) als Zeitfenster für das Laufen zu haben.

Gibt es eine Möglichkeit, eine CronExpression so zu konfigurieren, dass sie etwa alle 5 Minuten zwischen 7:37 Uhr und 21:13 Uhr ausgeführt wird? Die Konfiguration für 7AM - 9PM ist einfach. Ich kann jedoch nicht herausfinden, ob es einen Weg gibt (vielleicht wird es nicht einmal unterstützt), um einen detaillierteren Zeitplan auszuführen.

Ich habe eine Anwendung, mit der Benutzer benutzerdefinierte Zeitpläne festlegen können. Im Moment bin ich auf die nächste "volle Stunde" gerundet, da ich nicht weiß, wie man bestimmte Zeiten macht.

Das funktioniert zum Beispiel

0 0/5 2-16? * 1-7 // läuft alle 5 Minuten zwischen 2 und 16 Uhr jeden Tag der Woche

Was wäre also der Ausdruck, wenn ich laufen möchte:

alle 5 Minuten zwischen 2:19 Uhr und 16:13 Uhr?

Oder ist dies einfach nicht möglich (außerhalb der Erstellung mehrerer CronExpressions und damit sehr unordentlich)

Jede Hilfe, sehr geschätzt!

1

1 Antwort auf die Frage

0
AFH

Wenn Sie eingeben, sehen man 5 crontabSie folgendes Beispiel: -

 # Run on every second Saturday of the month 0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday" 

Wenden Sie dies auf Ihren Fall an: -

 0 0/5 2-16 ? * 1-7 test $(date +\%R) \> 02:19 -a $(date +\%R) \< 16:13 && YourCommand 

Wenn YourCommandes sich um ein Skript handelt, können Sie alternativ die Zeittests in das Skript integrieren.

Da der Befehl bei Vielfachen von 5 Minuten nach der vollen Stunde aufgerufen wird, sind Tests für >und >=gleichwertig (ebenso <und <=). Andernfalls müssen Sie möglicherweise die Testgrenzen anpassen (z. B. >= 02:18), da und / und Stringvergleiche testnicht unterstützt werden .>=<=

Vielen Dank für Ihre ausführliche Antwort. Ich hätte wahrscheinlich erwähnen sollen, dass ich dies in Java mache. Ich verwende also die TriggerBuilder-Klasse, die ein org.quartz.CronScheduleBuilder-Objekt aufnimmt (an das ich in meiner "CronExpression" übergeben habe). Das Format des Beispiels, das Sie mir gesendet haben, ist daher ungültig. Ich arbeite ca. 3-4 Tage mit diesem CronExpression-Format und hatte noch nie zuvor davon gehört: D Tipps zur Konvertierung Ihres Beispiels in Java? Ich frage mich, ob ich das Zeitfenster außerhalb des Triggers überwachen soll ... und es erst nach der Startzeit erstellen soll .. und es danach löschen? elspoono vor 6 Jahren 0
hmm ... habe vielleicht die Lösung gefunden, nach der ich in Java gesucht habe. elspoono vor 6 Jahren 0
In `cron` wird die Befehlszeichenfolge mit einem Shellbefehl geplant, z. B.` bash -c 'test $ (Datum + \% R) \> 02:19 -a $ (Datum + \% R) \ <16:13 && YourCommand`` (entsprechend Ihrer Standard-Shell) und `YourCommand` ist ein Befehl, den die Shell erkennt, einschließlich` java RunString`. AFH vor 6 Jahren 0