Einen Cron-Ausdruck erstellen

erstellt einen Cron-Ausdruck aus visuellen Feldern oder einer Voreinstellung (jede Minute, stündlich, täglich, wöchentlich...)

Warum ein visueller Cron-Builder?

Ein Cron-Ausdruck umfasst fünf Felder und ist dennoch eine der häufigsten Fehlerquellen in der Produktion. Wie oft hat ein Entwickler 0 0 * * 1 geschrieben in der Annahme, dies bedeute "jeden Montag", ohne sich zu erinnern, dass 1 je nach Implementierung Sonntag bedeuten kann? Wie oft wurden */15 und 15 verwechselt? Der Cron-Builder deckt dieses Bedürfnis: einen Crontab-Ausdruck visuell zusammenzustellen, aus gängigen Voreinstellungen oder aus einzelnen Feldern, und den endgültigen Ausdruck zu erhalten, der bereit ist, in eine Linux-Crontab, einen Kubernetes CronJob oder einen GitHub-Actions-Zeitplan eingefügt zu werden.

Das Tool ist das Gegenstück zu unserem Cron-Decoder: Während der Konverter einen Ausdruck entgegennimmt und die nächsten Ausführungen abrollt, nimmt der Builder menschliche Entscheidungen entgegen und erzeugt den entsprechenden Cron-Ausdruck.

Wie es funktioniert

Die grafische Oberfläche bietet zwei komplementäre Kompositionsmodi:

  • Preset-Modus: ein Frequenzwähler (every minute, every hour, every day, every week, every month, every year, custom), der sofort einen gültigen Cron-Ausdruck erzeugt.
  • Feldmodus: fünf editierbare Felder (Minute, Stunde, Tag des Monats, Monat, Wochentag), in denen Sie frei *, eine ganze Zahl, einen Bereich 1-5, eine Liste 1,15,30 oder einen Schritt */15 eingeben.

Der Builder aktualisiert den Ausdruck in Echtzeit und zeigt eine kurze menschliche Lesart ("täglich um 3 Uhr", "alle 15 Minuten") an, die als Sicherheit dient: Wenn der Satz nicht zu Ihrer Absicht passt, ist der Ausdruck wahrscheinlich falsch.

Die fünf Cron-Felder im Klartext

Ein Cron-Standardausdruck enthält fünf durch Leerzeichen getrennte Felder:

minute  heure  jour-du-mois  mois  jour-de-la-semaine
*       *      *             *     *
  • Minute (0 bis 59);
  • Stunde (0 bis 23);
  • Tag des Monats (1 bis 31);
  • Monat (1 bis 12 oder Abkürzungen Jan, Feb usw.);
  • Wochentag (0 bis 7, wobei 0 und 7 in den meisten Implementierungen Sonntag bedeuten).

Jedes Feld akzeptiert mehrere Formen: * (alle Werte), eine bestimmte ganze Zahl (5), eine Liste (1,3,5), einen Bereich (9-17), einen Schritt (*/15 alle 15 Werte) oder eine Kombination (0-30/5).

Typische Anwendungsfälle

  • Entwickler, der Cron lernt: visualisieren, wie die Felder interagieren, ohne in der Produktion einen falschen Ausdruck zu riskieren.
  • Eiliger Sysadmin: in wenigen Sekunden einen Zeitplan für einen Linux-Cron, einen Kubernetes CronJob oder einen Ansible-Job erzeugen, ohne die Man-Page erneut zu lesen.
  • Entwickler ohne POSIX-Erfahrung: einen gültigen Crontab-Ausdruck für Symfony Scheduler, Laravel Scheduler oder node-cron erzeugen, ohne die historische Syntax zu kennen.
  • DevOps im Review: schnell einen Ausdruck in einer Pull Request prototypieren und dann mit dem Cron-Decoder validieren.
  • Legacy-Migration: einen historischen Cron-Ausdruck über den Builder neu formulieren, um die Semantik vor der Übertragung an einen anderen Ort sicherzustellen.

Gängige Voreinstellungen

Die Auswahl einer Voreinstellung überschreibt die einzelnen Felder und erzeugt den entsprechenden Ausdruck:

  • Jede Minute: * * * * *. In der Produktion zu vermeiden, außer bei besonderem Bedarf.
  • Jede Stunde: 0 * * * *. Zu jedem Stundenbeginn.
  • Jeden Tag: 0 0 * * *. Um Mitternacht.
  • Jede Woche: 0 0 * * 0. Jeden Sonntag um Mitternacht.
  • Jeden Monat: 0 0 1 * *. Am 1. des Monats um Mitternacht.
  • Jedes Jahr: 0 0 1 1 *. Am 1. Januar um Mitternacht.

Gängige Muster, die man kennen sollte

Ausdruck Menschliche Lesart
0 0 * * * Jeden Tag um Mitternacht
*/15 * * * * Alle 15 Minuten
0 9 * * 1-5 An jedem Werktag um 9 Uhr
0 0 1 * * Am 1. des Monats um Mitternacht
0 0 * * 0 Jeden Sonntag um Mitternacht
*/5 9-17 * * 1-5 Alle 5 Minuten während der Bürozeiten
0 3 * * * Jeden Tag um 3 Uhr morgens
30 2 1,15 * * Am 1. und 15. des Monats um 2:30 Uhr

Einen benutzerdefinierten Ausdruck zusammenstellen

Für spezifischere Fälle bietet der Assistent die fünf Felder zur freien Eingabe. Einige nützliche Beispiele:

  • Jeden Tag um 3 Uhr morgens: minute=0, heure=3, andere Felder *.
  • Alle 15 Minuten: minute=*/15, andere Felder *.
  • Von Montag bis Freitag um 9 Uhr: minute=0, heure=9, jour-de-la-semaine=1-5.
  • Am 1. und 15. des Monats um 12 Uhr: minute=0, heure=12, jour-du-mois=1,15.
  • Alle 5 Minuten zwischen 9 und 17 Uhr: minute=*/5, heure=9-17.

So verwenden Sie den Cron-Builder

  1. Wählen Sie eine Voreinstellung (every minute, every hour, every day, every week, every month, every year) aus, die der Basis Ihres Bedarfs entspricht.
  2. Verfeinern Sie bei Bedarf, indem Sie die fünf Felder (Minute, Stunde, Tag des Monats, Monat, Wochentag) direkt bearbeiten.
  3. Lesen Sie den vom Tool erzeugten menschlichen Satz, um die Absicht zu bestätigen.
  4. Kopieren Sie den erzeugten Cron-Ausdruck über die Kopierschaltfläche.
  5. Validieren Sie den Zeitplan mit unserem Cron-Decoder, der die nächsten tatsächlichen Ausführungsdaten berechnet.
  6. Fügen Sie den Ausdruck in Ihre Linux-Crontab, Ihren Kubernetes CronJob, Ihren Symfony Scheduler oder Ihren GitHub-Actions-Workflow ein.

Klassische Stolperfallen

  • Tag des Monats und Wochentag kombiniert: Wenn beide nicht * sind, unterscheidet sich das Verhalten je nach Implementierung. Linux/Vixie cron wendet ein ODER an; moderne Bibliotheken haben manchmal ein anderes Verhalten. Zu vermeiden.
  • Tag 1 = Montag oder Sonntag?: Je nach Land und Konvention. Die meisten Unix-Cron-Systeme betrachten Sonntag=0 und Samstag=6. Prüfen Sie Ihren Scheduler.
  • Zeitzone: Ein Unix-Cron verwendet standardmäßig die Zeitzone des Servers. Anwendungs- scheduler (Symfony Scheduler, Quartz) erlauben häufig, eine dedizierte Zeitzone festzulegen.
  • Fehlende Minute: * * * * * führt den Job jede Minute aus, was selten das ist, was man will. Denken Sie daran, einen präzisen Trigger (0) für stündliche Aufgaben zu setzen.

Menschliche Lesart und Ausgabe

Zusätzlich zum Cron-Ausdruck bietet das Tool eine kurze menschliche Lesart ("jeden Tag um Mitternacht", "alle 5 Minuten"). Es ist eine Sicherung: Wenn der Satz nicht zu Ihrer Absicht passt, ist der Ausdruck wahrscheinlich falsch. Für einen komplexen Fall verwenden Sie anschließend unseren Cron-Decoder, um die nächsten tatsächlichen Ausführungsdaten zu berechnen.

Häufig gestellte Fragen

Kann ich den Ausdruck nach Nutzung der Oberfläche manuell bearbeiten?

Ja. Der Builder ist kein exklusiver Modus: Die fünf Felder bleiben jederzeit editierbar. Sie können mit einer Voreinstellung beginnen und dann ein Feld manuell anpassen, um einen maßgeschneiderten Crontab- Ausdruck zu erhalten. Die menschliche Lesart wird sofort neu berechnet.

Unterstützt das Tool das Quartz-Format mit 6 Feldern (mit Sekunden)?

Nein: Das 5-Feld-Format ist der Unix-Standard und die gemeinsame Basis der meisten Scheduler (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler). Quartz (Java) akzeptiert ein zusätzliches Feld für Sekunden und spezifische Symbole (?, L, W, #), aber dieser Bedarf bleibt selten.

Wie wird die Zeitzone gehandhabt?

Der Builder erzeugt einen neutralen Cron-Ausdruck: Die ausführende Engine wendet ihre eigene Zeitzone an. Auf einer Linux-Crontab ist es die TZ des Servers. Auf GitHub Actions ist es UTC. Auf Kubernetes 1.27+ können Sie spec.timeZone im Manifest festlegen. Symfony Scheduler und Quartz bieten eine dedizierte Zeitzone pro Aufgabe.

Wie kann ich meinen Ausdruck validieren, ohne ihn in der Produktion auszuführen?

Verwenden Sie unseren Cron-Decoder. Er berechnet die nächsten N Ausführungen ab dem aktuellen Zeitpunkt, ohne einen Job zu starten. Es ist die beste Methode, um zu bestätigen, dass ein Cron-Ausdruck tatsächlich zur geplanten Zeit feuert, bevor er bereitgestellt wird.

Wie ist der Bezug zu Symfony Scheduler?

Symfony Scheduler akzeptiert Cron-Ausdrücke mit 5 Feldern über Schedule::cron('0 3 * * *', ...) . Der vom Builder erzeugte Ausdruck kann also so wie er ist eingefügt werden. Gleiches gilt für Laravel Scheduler (->cron('...')), node-cron, Hangfire und Airflow.

Muss man den Befehl in der System-Crontab präfixieren?

Ja, in /etc/crontab ist ein Benutzer erforderlich (0 3 * * * www-data /usr/bin/php ...), während crontab -e pro Benutzer ihn weglässt. Der Ausdruck selbst bleibt identisch.

Beispielanfrage

curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
  -H "Content-Type: application/json" \
  -d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'

Eingabeschema

Feld Typ Erforderlich Standard
preset choice (none, every_minute, hourly, daily, weekly, monthly, yearly) none
minute string *
hour string *
day_of_month string *
month string *
day_of_week string *

Endpunkte

  • GET https://cdrn.fr/api/v1/tools - listet alle verfügbaren Tools auf
  • GET https://cdrn.fr/api/v1/tools/cron-builder - liefert das Schema dieses Tools
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - führt dieses Tool mit einem JSON-Payload aus