0 * * * * lässt den Auftrag einmal pro Stunde laufen, jeweils zur Minute 0, also 24-mal am Tag. Das erste Feld legt die Minute fest, der Stern im Stundenfeld bedeutet jede Stunde. Die Kurzform @hourly steht für genau diese Zeile, beide sind in jeder Crontab austauschbar.
Warum ist Minute 0 ein schlechter Platz?
Weil dort schon alles andere ist. Log-Rotation, Sicherungs-Agenten, Überwachungs-Exporter und jeder weitere Stundenauftrag der Maschine feuern im selben Moment, und eine gemeinsame Datenbank oder Schnittstelle sieht die ganze Herde auf einmal ankommen. Ein Wechsel auf 17 * * * * kostet nichts, verteilt die Last und macht aus einer rätselhaften Latenzspitze zur vollen Stunde oft eine gerade Linie.
Was unterscheidet 0 * * * * von @hourly?
Im Verhalten nichts: Die Kurzform wird beim Einlesen der Crontab in genau dieselben fünf Felder übersetzt. Die ausgeschriebene Form ist in gemeinsam genutzten Dateien angenehmer, weil man sie später zu etwas anderem umbauen kann und weil jeder Leser sofort sieht, welche Minute der Auftrag belegt. Nur @reboot hat keine Entsprechung in fünf Feldern.
Wie laufe ich alle zwei oder drei Stunden?
Setze die Schrittweite ins Stunden-, nicht ins Minutenfeld: 0 */2 * * * läuft um 0:00, 2:00, 4:00 und so weiter. Weil 24 durch 2, 3, 4, 6, 8 und 12 teilbar ist, bleiben diese Schritte über Mitternacht hinweg gleichmäßig; 0 */5 * * * dagegen springt von 20:00 direkt auf die nächste 0:00.
So trägst du den Ausdruck ein
- Eine Minute wählen, die nicht 0 ist – 7, 17 oder 23 sind auf einer belebten Maschine gute Werte.
- Die Zeile eintragen, etwa 17 * * * * /pfad/zum/skript.sh, und die Crontab speichern.
- Sicherstellen, dass der Auftrag deutlich innerhalb einer Stunde fertig wird, sonst eine Sperre ergänzen.
- Oben im Erklärer gegenprüfen, ob der Plan so gelesen wird, wie du ihn gemeint hast.