Wenn du einen Server betreibst, gibt es Aufgaben, die regelmäßig laufen müssen: ein Backup um drei Uhr nachts, der Neustart eines Dienstes, das Einspielen von Sicherheitsupdates oder das Aufräumen alter Log-Dateien. Genau dafür gibt es Cronjobs. Cron ist der klassische Zeitplaner unter Linux: ein Dienst, der im Hintergrund läuft und Befehle zu festgelegten Zeitpunkten ausführt, ganz ohne dass du eingeloggt sein musst.
In diesem Artikel lernst du, wie du mit crontab eigene Aufgaben planst und wie die Syntax funktioniert. Außerdem bekommst du fertige Beispiele für Backup, Neustart und Updates, erfährst, wie du das Logging im Griff behältst, und wann sich ein systemd-Timer als moderne Alternative lohnt.
Was ist Cron und wann brauchst du es
Cron besteht aus zwei Teilen: dem Dienst (cron beziehungsweise crond), der dauerhaft im Hintergrund läuft, und der crontab (cron table) — einer Tabelle, in der deine geplanten Befehle stehen. Jeder Nutzer auf dem System hat seine eigene crontab. Zusätzlich gibt es eine System-crontab unter /etc/crontab und Verzeichnisse wie /etc/cron.daily für Skripte, die täglich laufen sollen.
Du brauchst Cron immer dann, wenn etwas wiederkehrend und unbeaufsichtigt passieren soll. Auf einem Root-Server mit voller Kontrolle ist das der Normalfall: Datenbank-Dumps, das Erneuern von Zertifikaten, das Synchronisieren von Dateien auf einen externen Speicher oder kleine Wartungsskripte.
Die crontab bearbeiten mit crontab -e
Der wichtigste Befehl ist crontab -e. Damit öffnest du die crontab des aktuellen Benutzers in einem Editor (meist nano oder vi). Beim ersten Aufruf fragt Cron, welchen Editor du nutzen möchtest. Speicherst und schließt du die Datei, wird die neue crontab sofort aktiv — ein Neustart des Dienstes ist nicht nötig.
Ein paar nützliche Varianten:
crontab -lzeigt die aktuelle crontab an, ohne sie zu bearbeiten.crontab -rlöscht die komplette crontab (Vorsicht, ohne Rückfrage).sudo crontab -e -u www-databearbeitet die crontab eines anderen Nutzers, etwa des Webserver-Users.
Bearbeite die crontab immer über crontab -e und nicht, indem du Dateien direkt editierst. Der Befehl prüft die Syntax und legt die Datei am richtigen Ort ab.
Die Cron-Syntax verstehen
Jede Zeile in der crontab besteht aus fünf Zeitfeldern und dem auszuführenden Befehl. Die Felder stehen in dieser Reihenfolge: Minute, Stunde, Tag des Monats, Monat, Wochentag.
Ein Sternchen bedeutet jeweils jeder Wert. Die Zeile 0 3 * * * sagt also: zur Minute 0 der Stunde 3, an jedem Tag, in jedem Monat, an jedem Wochentag — kurz: täglich um 03:00 Uhr.
Die Wertebereiche sind: Minute 0 bis 59, Stunde 0 bis 23, Tag 1 bis 31, Monat 1 bis 12, Wochentag 0 bis 7 (wobei 0 und 7 beide Sonntag sind). Daneben gibt es Operatoren, die dir Tipparbeit sparen:
- Ein Komma listet mehrere Werte auf, etwa
0,30für Minute 0 und 30. - Ein Bindestrich definiert einen Bereich wie
1-5für Montag bis Freitag. - Ein Schrägstrich legt Schrittweiten fest:
*/15im Minutenfeld bedeutet alle 15 Minuten.
Zusätzlich gibt es Abkürzungen wie @daily, @hourly, @weekly oder @reboot. Letzteres ist praktisch, wenn ein Befehl bei jedem Systemstart laufen soll.
Praktische Beispiele
Hier ein paar konkrete Zeilen, die du direkt anpassen kannst.
Tägliches Datenbank-Backup um 03:00 Uhr, das einen MySQL-Dump mit Datum im Dateinamen ablegt:
0 3 * * * mysqldump -u backup -p'GEHEIM' meinedb > /backups/db-$(date +\%F).sql
Beachte: In der crontab muss das Prozentzeichen mit einem Backslash escaped werden, sonst interpretiert Cron alles danach als Eingabe.
Wöchentlicher Neustart eines Dienstes, jeden Sonntag um 04:30 Uhr:
30 4 * * 0 systemctl restart nginx
Automatische Paket-Updates jeden Montag um 02:00 Uhr (Debian/Ubuntu):
0 2 * * 1 apt-get update && apt-get -y upgrade
Alle 15 Minuten ein Sync-Skript ausführen:
*/15 * * * * /usr/local/bin/sync.sh
Alte Log-Dateien täglich aufräumen, die älter als 14 Tage sind:
15 1 * * * find /var/log/myapp -name '*.log' -mtime +14 -delete
Bei sicherheitsrelevanten Aktionen wie automatischen Upgrades solltest du dir bewusst sein, dass im Fehlerfall niemand zuschaut. Teste Befehle deshalb vorher manuell auf der Kommandozeile.
Logging: damit du Fehler mitbekommst
Standardmäßig schickt Cron die Ausgabe eines Jobs per lokaler Mail an den Benutzer — was auf vielen Servern ins Leere läuft, weil kein Mailsystem eingerichtet ist. Besser ist es, Ausgabe und Fehler selbst in eine Log-Datei umzuleiten. Mit >> hängst du die Standardausgabe an, mit 2>&1 leitest du zusätzlich die Fehlerausgabe in dieselbe Datei:
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Willst du Ausgaben komplett verwerfen, nutzt du > /dev/null 2>&1. Das ist aber nur sinnvoll, wenn du die Meldungen sicher nie brauchst.
Ein häufiger Stolperstein: Cron läuft mit einer minimalen Umgebung. Das PATH ist sehr kurz, und Variablen aus deiner normalen Shell fehlen. Verwende deshalb immer absolute Pfade (also /usr/bin/mysqldump statt mysqldump) oder setze PATH am Anfang der crontab.
systemd-Timer als moderne Alternative
Auf modernen Distributionen gibt es mit systemd-Timern eine Alternative zu Cron. Ein Timer besteht aus zwei Dateien: einer .service-Datei, die beschreibt was ausgeführt wird, und einer .timer-Datei, die festlegt wann.
Die Vorteile: Timer tauchen im normalen systemd-Logging (journalctl) auf, lassen sich mit systemctl list-timers übersichtlich anzeigen und können verpasste Läufe nachholen (Persistent=true). Ein Timer, der täglich läuft, nutzt im .timer-File etwa OnCalendar=daily.
Für einfache, gewohnte Aufgaben bleibt Cron völlig ausreichend und ist schneller eingerichtet. Sobald du aber sauberes Logging, Abhängigkeiten zwischen Diensten oder das Nachholen verpasster Läufe brauchst, sind systemd-Timer die robustere Wahl. Beide Systeme können problemlos nebeneinander laufen.
Mit Nytrix umsetzen
Cronjobs entfalten ihren Nutzen erst dort, wo du volle Kontrolle über das System hast. Genau das bekommst du mit einem VServer von Nytrix: voller Root-Zugriff per SSH, SSD/NVMe-Speicher und 5 TB Traffic pro Monat inklusive. Damit richtest du crontab -e und systemd-Timer ohne Einschränkungen ein.
Der Einstieg gelingt mit dem No-IP-Tarif für 1,99 EUR (4 vCore, 4 GB RAM, 40 GB) — ideal zum Ausprobieren. Brauchst du eine eigene IPv4, starten die BASIC-Tarife bei 9,99 EUR (BASIC-4), 17,00 EUR (BASIC-6) und 25,50 EUR (BASIC-8). Neu installieren kannst du wahlweise Debian 12 oder Ubuntu 24.04, CPU und RAM lassen sich per Hot-Plug aufrüsten, und dank aktiviertem Nesting läuft auch Docker. Alles auf Prepaid-Basis, ohne Mindestlaufzeit und ohne Vertragsbindung.
Für geplante Backups bietet sich der separate FTP Storage als Ziel an: ab 2,99 EUR pro TB im Monat, per FTP/FTPS/SFTP erreichbar, sodass dein nächtliches Backup-Skript die Dumps direkt dorthin schiebt. Wer es bequemer mag, ergänzt das optionale Smart Backup (2,50 EUR einmalig). Der DDoS-Schutz ist bei allen Tarifen inklusive. Weitere Tipps rund um den Serverbetrieb findest du im Nytrix-Blog.