Fügen Sie einen Cron-Ausdruck ein und sehen Sie, was er bedeutet und wann er genau als Nächstes läuft. Gebaut für wiederkehrende Jobs in Hangfire, die das Cronos-Format verwenden — 5 Felder oder 6 mit Sekunden —, funktioniert aber genauso für klassisches Unix-Cron.
—
Läuft vollständig im Browser, es wird nichts gesendet. Teilbare Links: ?expr=0%203%20*%20*%20* an die URL anhängen.
Ein Cron-Ausdruck ist eine Liste von Feldern, getrennt durch Leerzeichen. Jedes Feld schränkt ein, wann der Job laufen darf; er löst zu jedem Zeitpunkt aus, an dem alle Felder passen.
| Position | Feld | Erlaubte Werte |
|---|---|---|
| (1) | Sekunde — optional, nur bei 6 Feldern | 0-59 |
| 1 | Minute | 0-59 |
| 2 | Stunde | 0-23 |
| 3 | Tag des Monats | 1-31, L, W |
| 4 | Monat | 1-12 oder JAN-DEC |
| 5 | Wochentag | 0-7 (0 und 7 = Sonntag) oder SUN-SAT, L, # |
Sonderzeichen: * jeder Wert, , Liste (1,15), - Bereich (MON-FRI), / Schrittweite (*/15 = alle 15), ? wie * in den Tagesfeldern. Makros wie @daily, @hourly und @weekly funktionieren ebenfalls.
| Zeitplan | Ausdruck | Hangfire-Helfer |
|---|---|---|
| Jede Minute | * * * * * | Cron.Minutely() |
| Alle 15 Minuten | */15 * * * * | — |
| Jede volle Stunde | 0 * * * * | Cron.Hourly() |
| Täglich um 03:30 | 30 3 * * * | Cron.Daily(3, 30) |
| Werktags um 07:00 | 0 7 * * 1-5 | — |
| Jeden Montag um Mitternacht | 0 0 * * 1 | Cron.Weekly() |
| Am Ersten jedes Monats | 0 0 1 * * | Cron.Monthly() |
| Nie (deaktiviert) | 0 0 31 2 * | Cron.Never() |
Der häufigste Vorfall mit wiederkehrenden Jobs ist kein falscher Ausdruck, sondern ein richtiger, der lautlos aufgehört hat auszulösen: Der Server mit dem Scheduler wurde herunterskaliert, nach einem Deploy lief kein Worker mehr, oder der Job warf bei jedem Versuch eine Exception und niemand hat es gesehen. Nichts davon steht im Cron-Ausdruck. Es braucht eine externe Prüfung, die merkt, wenn die erwartete Arbeit ausbleibt. Das ist die Idee hinter Heartbeat-Monitoring — und das, was QueueHawk für Hangfire übernimmt.
Ja. Wiederkehrende Jobs werden in UTC ausgewertet, sofern keine Zeitzone angegeben ist, etwa new RecurringJobOptions { TimeZone = TimeZoneInfo.Local } oder eine bestimmte Zone über TimeZoneInfo.FindSystemTimeZoneById. Mit lokaler Zeitzone kann die Zeitumstellung einen Lauf in der betroffenen Stunde überspringen oder wiederholen.
Hangfire akzeptiert Cron-Ausdrücke mit 6 Feldern inklusive Sekunden, etwa */30 * * * * *. Wiederkehrende Jobs werden aber von einem abfragenden Scheduler angestossen — Zeitpläne unter einer Minute sind deshalb nur ungefähr und für alles mit exaktem Timing ungeeignet.
Der Job läuft, wenn eines von beiden zutrifft. 0 0 1,15 * 1 läuft am 1. und 15. jedes Monats und an jedem Montag — nicht nur an Montagen, die auf den 1. oder 15. fallen. Das ist klassisches Cron-Verhalten und sorgt regelmässig für Überraschungen.
Cron.Minutely() ist * * * * *, Cron.Hourly() ist 0 * * * *, Cron.Daily() ist 0 0 * * * (Mitternacht UTC), Cron.Weekly() ist 0 0 * * 1 (Montag), Cron.Monthly() ist 0 0 1 * * und Cron.Yearly() ist 0 0 1 1 *. Die meisten Helfer nehmen Argumente, etwa Cron.Daily(3, 30) für 03:30.
Ein Cron-Ausdruck sagt nur, wann ein Job laufen soll. Ob er gelaufen ist, ist eine Monitoring-Frage: Ein ausgefallener Scheduler oder ein verschwundener Server erzeugt überhaupt keinen Fehler. Ein Heartbeat-Check pro Anwendung und eine Job-Historie, die Deploys übersteht, beantworten sie.
Heartbeat- und Fehlerraten-Alerts für wiederkehrende Hangfire-Jobs. Kostenlos für eine Application.