Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Das folgende Tutorial basiert auf dem englischen Tutorial von http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger and wurde auf Deutsch übersetzt.


Cron ist ein UNIX Tool mit überzeugenden Planungsfunktionen. Die CronTrigger Klasse baut auf den Planungsfunktionen von cron aus.

CronTrigger nutzt "cron Befehle", die dazu fähig sind, Befehle zu bestimmten Zeitpunkten auszuführen (z.B. "Montags - Freitags um 08:00h", oder "Jeden letzten Freitag im Monat um 1:30").

Cron Befehle sind mächtig, aber können auch verwirrend sein. Dieses Tutorial soll beim Verständnis von Cron helfen und Ihnen eine Ressource an die Hand geben, die Sie vor Forenbesuchen o.ä. aufrufen können.

 

Format

Ein Cron Ausdruck ist ein String, der 6 oder 7 Felder beinhaltet, die jeweils mit einem Leerzeichen getrennt sind. Felder können jeden erlaubten Wert beinhalten, zusammen mit verschiedenen Kombinationen aus erlaubten Sonderzeichen für das Feld. Die Felder sind:

FeldnameVerpflichtend?Erlaubte WerteErlaubte Sonderzeichen
SecondsYES0-59- * /
MinutesYES0-59, - * /
HoursYES0-23, - * /
Day of monthYES1-31, - * ? / L W
MonthYES1-12 or JAN-DEC, - * /
Day of weekYES1-7 or SUN-SAT, - * ? / L #
YearNOempty, 1970-2099, - * /

Dementsprechend können Cron Befehle einfach (z.B. * * * * ? *), aber auch komplex sein (z.B. 0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010). 

Sonderzeichen

  • * ("all values") - wird verwendet, um alle Werte eines Felds auszuwählen (z.B. jede Sekunde, jede Minute usw.)

  • ? ("no specific value") - z.B. nützlich, wenn Sie etwas in einem der zwei Felder angeben möchten, in welchem das eine Zeichen erlaubt ist, das andere jedoch nicht. Zum Beispiel kommt dies zum Einsatz, wenn ein Befehl an einem bestimmten Tag des Monats (z.B. der 10.) ausgeführt werden soll, dabei der Wochentag aber egal ist. Hier würde man "10" in "Day of month" schreiben, und ? in das "Day of week" Feld. 

  • - wird verwendet um Bereiche zu definieren. Beispiel: "10-12" im "Hour"-Feld, spricht "Stunde 10, 11 und 12" an..

  • , wird verwendet, um zusätzliche Werte anzugeben. Beispiel: MON,WED,FRI in "Day of week" bedeutet "Die Wochentage Montag, Mittwoch und Freitag".

  • wird verwendet, um einen (periodischen) Anstieg auszudrücken. Beispiel: "0/15" gibt "0,15,30,45" an. "5/15" gibt "5,20,35,50" an. 

  • L ("last") - hat verschiedene Bedeutungen in den beiden Feldern, in welchen es erlaubt ist. Beispiel: "L" im "Day-of-month" Feld bedeutet "Der Letzte Tag des Monats" (also Tag 31 im Januar, Tag 30 im April usw.). Wird L im "Day-of-Week" - Feld angewendet, bedeutet dies "7" oder einfach "SAT" Wenn es jedoch im "Day-of-Week" Feld nach einem anderen Wert verwendet wird, bedeutet es "Die letzten xx Tage des Monats", z.B. "6L" bedeutet "Der letzte Freitag des Monats".

  • W ("weekday") - wird verwendet, um Wochentage nahe einem gegebenen Tag zu spezifizieren. Beispiel: Wenn wir "15W" als Wert im "Day-of-Month" Feld anwenden, bedeutet dies "der nächste Wochentag zum 15. des Monats". Wenn der 15. also ein Samstag ist, wird der Befehl am Freitag (14.) ausgeführt, wenn der 15. ein Sonntag ist, wird am Montag (16.) ausgeführt. Ist der 15. ein Dienstag, wird auch am Dienstag ausgeführt. Diese Abgrenzung geht jedoch nicht über Monatsgrenzen hinweg.

'L' und 'W' können auch kombiniert werden (im "Day-of-Month" Field: "LW" gibt an: "Letzter Wochentag des Monats"

  • # wird verwendet, um den "nten Tag des Monats" zu verwenden. Beispiel: "6#3" im "Day-of-Week" Feld bedeutet "Der dritte Freitag des Monats" (day 6 = Freitag, #3 = der dritte des Monats). Anderes Beispiel: 2#1 = "Der erste Montag des Monats", "4#5" = "Der fünfte Mittwoch des Monats" 

Die erlaubten Zeichen und die Namen des Monats und Wochentage sind nicht von der Groß-/Kleinschreibung abhängig. MON ist das gleiche wie mon.

Beispiel

Hier sind einige Beispiele:

AusdruckWann wird ausgeführt?
0 0 12 * * ?Täglich um 12:00h
0 15 10 ? * *Täglich um 10:15h
0 15 10 * * ?Täglich um 10:15h
0 15 10 * * ? *Täglich um 10:15h
0 15 10 * * ? 2005Täglich um 10:15h im Jahr 2005
0 * 14 * * ?Täglich jede Minute ab 14:00h bis 14:59h
0 0/5 14 * * ?Täglich alle 5 Minuten ab 14:00h bis 14:55h
0 0/5 14,18 * * ?Täglich alle 5 Minuten ab 14:00h bis 14:55h UND alle 5 Minuten ab 18:00h - 18:55h
0 0-5 14 * * ?Täglich jede Minute ab 14:00h bis 14:05h
0 10,44 14 ? 3 WEDJeden Mittwoch im März um 14:10h und 14:44h
0 15 10 ? * MON-FRIMontags, Dienstags, Mittwochs, Donnerstags, Freitags jeweils um 10:15h.
0 15 10 15 * ?Monatlich am 15. jeweils um 10:15h
0 15 10 L * ?Monatlich am letzten Tag (des Monats) um 10:15h
0 15 10 ? * 6LMonatlich am letzten Freitag (des Monats) um 10:15h
0 15 10 ? * 6L 2002-2005Monatlich am letzten Freitag (des Monats) um 10:15h in den Jahren 2002, 2003, 2004, 2005
0 15 10 ? * 6#3Monatlich am dritten Freitag um 10:15h
0 0 12 1/5 * ?Um 12:00h, jeweils die ersten 5 Tage von jedem Monat
0 11 11 11 11 ?Immer am 11. November um 11:11h.

Passen Sie auf den Einfluss von ? und * in den "Day-of-week" und "Day-of-months" Felder auf!

Bitte beachten

  • Unterstützung für die Spezifikation von "Day-of-Week" und "Day-of-Month" Werten ist nicht vollständig (Sie müssen ein '?' jeweils einfügen)
  • Seien Sie vorsichtig wenn Sie die Ausführung zwischen Mitternacht und 1:00h setzen, es könnte zu einer Überspringung oder Wiederholung kommen!