So wird gerechnet
Eine Crontab-Zeile beginnt mit fünf durch Leerzeichen getrennten Feldern, gefolgt vom auszuführenden Befehl. Cron prüft sie jede Minute und führt den Befehl aus, wenn Minute, Stunde, Tag des Monats, Monat und Wochentag alle passen.
┌─ Minute │ ┌─ Stunde │ │ ┌─ Tag des Monats │ │ │ ┌─ Monat │ │ │ │ ┌─ Wochentag * * * * * /path/to/command
Die beiden Tagesfelder verbinden sich auf eine Weise, die viele überrascht: Sind beide eingeschränkt, läuft der Job, wenn eines von beiden passt. 0 0 13 * 5 läuft an jedem 13. und an jedem Freitag, nicht nur an Freitag, dem 13. Beginnt eines der beiden mit *, müssen beide passen.
Die fünf Felder
| Feld | Erlaubte Werte |
|---|---|
| Minute | 0–59 |
| Stunde | 0–23 |
| Tag des Monats | 1–31 |
| Monat | 1–12 oder JAN–DEC |
| Wochentag | 0–7 oder SUN–SAT (0 und 7 sind Sonntag) |
Sonderzeichen
- * passt auf jeden Wert des Feldes.
- , listet Werte auf: 1,15 ist der 1. und der 15.
- - ist ein Bereich: 1-5 ist im Wochentagsfeld Montag bis Freitag.
- / ist eine Schrittweite: */10 ist jeder zehnte Wert, 5/10 jeder zehnte ab 5, 9-17/2 jede zweite Stunde von 9 bis 17.
- @hourly, @daily, @weekly, @monthly und @yearly ersetzen alle fünf Felder; @reboot läuft einmal, wenn der Server startet.
Beispiel
30 2 * * 1-5 läuft um 02:30 von Montag bis Freitag: Minute 30, Stunde 2, jeder Tag des Monats, jeder Monat und die Wochentage 1 bis 5. In der Crontab als 30 2 * * 1-5 /usr/local/bin/backup.sh geschrieben, startet es in jeder Nacht unter der Woche ein Backup.
Fragen
Was bedeutet */5 in Cron?
Jeden fünften Wert des Feldes. Im Minutenfeld führt */5 den Job in Minute 0, 5, 10 und so weiter bis 55 aus: alle fünf Minuten. */15 ist jede Viertelstunde, und */2 im Stundenfeld ist jede zweite Stunde ab Mitternacht.
Wie füge ich einen Cronjob auf einem Linux-Server hinzu?
Führen Sie crontab -e als der Benutzer aus, unter dem der Job laufen soll, fügen Sie eine Zeile mit den fünf Feldern und dem Befehl hinzu, speichern Sie und schließen Sie den Editor. crontab -l zeigt die Jobs, und systemweite Jobs gehören in eine Datei in /etc/cron.d, mit dem Benutzernamen nach den fünf Feldern.
Welche Zeitzone verwendet Cron?
Die des Servers selbst, auf einem VPS meist UTC. 0 3 * * * läuft auf einem UTC-Server im Winter um 04:00 und im Sommer um 05:00 Uhr in Berlin. Manche Cron-Varianten, etwa cronie, akzeptieren eine Zeile CRON_TZ= über den Jobs; sonst rechnen Sie die Zeit selbst um.
Soll ich Cron oder einen systemd-Timer verwenden?
Cron ist einfacher und funktioniert überall. Ein systemd-Timer braucht zwei kleine Dateien, protokolliert aber jeden Lauf im Journal, kann Läufe nachholen, die verpasst wurden, während der Server aus war (Persistent=true), und verhindert, dass zwei Kopien desselben Jobs gleichzeitig laufen.