Wenn Sie jemals einen Linux-Server verwaltet, in der Backend-Entwicklung gearbeitet oder automatisierte Cloud-Funktionen eingerichtet haben, sind Sie wahrscheinlich auf eine Zeichenfolge gestoßen, die etwa so aussieht: 0 2 * * *. Für den Uneingeweihten sieht es wie ein Tippfehler auf der Tastatur aus. Für Systemadministratoren ist es der Herzschlag der modernen Infrastrukturautomatisierung: ein Cron-Ausdruck.
Cron ist der unsichtbare Motor, der das Internet betreibt. Es stellt sicher, dass Ihre Datenbank um 3:00 Uhr morgens gesichert wird, löst die E-Mails aus, die Sie jeden Montagmorgen erhalten, und löscht temporäre Serverdateien, bevor sie das System zum Absturz bringen. Doch trotz ihrer Leistungsfähigkeit ist die Syntax für Menschen bekanntermaßen schwer zu analysieren. In diesem ausführlichen Tauchgang entmystifizieren wir die Sternchen und zeigen Ihnen, wie Sie Cron-Zeitpläne wie ein erfahrener DevOps-Ingenieur lesen und schreiben.
Was ist Cron und die Crontab?
Cron ist ein zeitbasierter Jobplaner, der in Unix-ähnlichen Computerbetriebssystemen zu finden ist. Der Name „cron“ kommt vom griechischen Wort für Zeit, chronos. Benutzer, die Softwareumgebungen einrichten und warten, verwenden Cron, um Jobs (Befehle oder Shell-Skripte) so zu planen, dass sie regelmäßig zu festen Zeiten, Daten oder Intervallen ausgeführt werden.
Die Crontab (Cron-Tabelle) ist die Konfigurationsdatei, in der diese Zeitpläne gespeichert werden. Wenn Sie Ihre Crontab über das Terminal bearbeiten, schreiben Sie eine Liste mit Anweisungen, die dem Server genau sagen, was wann ausgeführt werden soll.
Dekonstruktion der 5 Sternchen
Ein Standard-Cron-Ausdruck besteht aus 5 durch Leerzeichen getrennten Feldern. Jedes Feld stellt eine bestimmte Zeiteinheit dar und wird immer von links nach rechts in genau dieser Reihenfolge gelesen:
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)
Ein Sternchen (*) bedeutet „jeder mögliche Wert für dieses Feld“. Der Ausdruck * * * * * bedeutet also wörtlich: „Jede Minute, jede Stunde, jeden Tag, jeden Monat, jeden Tag der Woche ausführen.“
Syntaxmodifikatoren: Schritte, Bereiche und Listen
Die Kraft von Cron beruht auf seinen Modifikatoren. Sie sind nicht auf bestimmte Zahlen oder „alles“ beschränkt.
1. Der Schrittmodifikator (/)
Wenn Sie möchten, dass alle 15 Minuten ein Skript ausgeführt wird, verwenden Sie einen Schritt. */15 * * * * bedeutet „jede Minute, die durch 15 teilbar ist“. Es läuft um 0, 15, 30 und 45 nach der vollen Stunde.
2. Der Bereichsmodifikator (-)
Wenn Sie möchten, dass ein Skript nur während der Geschäftszeiten ausgeführt wird, verwenden Sie einen Bereich. 0 9-17 * * * bedeutet „Lauf zur Minute Null, stündlich von 9.00 bis 17.00 Uhr“.
3. Der Listenmodifikator (,)
Wenn Sie möchten, dass etwas an bestimmten, nicht aufeinanderfolgenden Tagen ausgeführt wird, verwenden Sie eine Liste. 0 0 1,15 * * bedeutet „am 1. und 15. des Monats um Mitternacht ausführen“.
Hören Sie auf, Cron-Ausdrücke zu erraten
Riskieren Sie nicht, jede Minute statt jeden Monat ein Backup-Skript auszuführen. Ein einzelner Tippfehler kann einen Produktionsserver zum Absturz bringen. Nutzen Sie unseren interaktiven visuellen Generator, um Cron-Strings sicher zu erstellen und zu validieren.
Öffnen Sie den Cron-Job-GeneratorDer gefährlichste Cron-Fehler
Der häufigste und katastrophalste Fehler, den Entwickler machen, ist die Verwechslung des Feldes „Minute“. Schauen wir uns ein Szenario an, in dem Sie einmal pro Stunde um 2:00 Uhr ein Datenbankbereinigungsskript ausführen möchten.
Der Fehler: * 2 * * *
Wenn Sie das oben stehende schreiben, weisen Sie den Server an, das Skript „Jede Minute, während der 2. Stunde des Tages“ auszuführen. Ihr umfangreiches Datenbankbereinigungsskript wird 60 Mal hintereinander ausgelöst, was wahrscheinlich Ihre CPU überlastet, Datenbanktabellen sperrt und einen massiven Ausfall verursacht.
Der richtige Weg: 0 2 * * *
Dadurch wird der Server ausdrücklich angewiesen, nur zur „Minute Null der 2. Stunde“ zu laufen. Es wird genau einmal um 2:00 Uhr ausgeführt.
Häufig gestellte Fragen (FAQ)
Berücksichtigt Cron Zeitzonen?
Standardmäßig wertet Cron Ausdrücke basierend auf der lokalen Systemzeit des Servers aus, auf dem es ausgeführt wird. Wenn Ihr Server in einer AWS-Region in London gehostet wird, läuft er auf UTC/GMT. Sie müssen Zeitzonenunterschiede berücksichtigen, wenn sich Ihre Benutzer in New York oder Tokio befinden.
Kann ich einen Cron-Job so planen, dass er jede Sekunde ausgeführt wird?
Nein. Standard-Unix-Cron ist auf eine Auflösung von einer Minute beschränkt. Wenn Sie eine Planung im Minutentakt benötigen (z. B. alle 10 Sekunden), müssen Sie ein separates Daemon-Tool verwenden oder ein Skript schreiben, das jede Minute ausgeführt wird, aber intern eine Schleife mit Ruhezustandsbefehlen durchführt.
Was bedeuten Zeichenfolgen wie @daily oder @hourly?
Viele moderne Implementierungen von Cron unterstützen nicht standardmäßige vordefinierte Makros, um die Planung zu vereinfachen. @daily ist genau das Gleiche wie 0 0 * * * (jeden Tag Mitternacht). @hourly ist dasselbe wie 0 * * * *. Obwohl sie nützlich sind, werden sie nicht von allen Legacy-Systemen allgemein unterstützt.