Was ist Cron? Cronjob unter Linux einrichten
Cronjob einrichten unter Linux: Crontab-Syntax, Beispiele, Backup- und Neustart-Jobs, typische Fehler, Cron-Logs und systemd-Timer als Alternative.

Inhalt
Cron ist der Zeitplaner, der auf Linux-Servern Befehle und Skripte automatisch zu festgelegten Zeiten ausführt. Aufgaben wie jede Nacht ein Backup erstellen, den Gameserver jeden Morgen neu starten, alte Logdateien aufräumen oder eine Website regelmäßig prüfen definieren Sie einmal, um den Rest kümmert sich Cron. Diese mit Cron geplanten Aufgaben heißen Cronjobs.
In dieser Anleitung erklären wir die Crontab-Syntax, häufig genutzte Zeitplan-Beispiele, praktische Jobs, die lästigsten Fehler bei Cron und den systemd-Timer als Alternative.
Wie bearbeite ich die Crontab?
Jeder Benutzer hat eine eigene Liste mit Jobs, die Crontab heißt. Zum Bearbeiten:
crontab -e
Beim ersten Aufruf werden Sie gebeten, einen Texteditor auszuwählen; nano ist der einfachste. Mit crontab -l sehen Sie die vorhandenen Jobs. Für Jobs, die Root-Rechte brauchen, bearbeiten Sie mit sudo crontab -e die Crontab von root.
Die Crontab-Syntax
Jede Zeile ist ein Job und besteht aus fünf Zeitfeldern und dem auszuführenden Befehl:
┌───────── Minute (0–59)
│ ┌─────── Stunde (0–23)
│ │ ┌───── Tag des Monats (1–31)
│ │ │ ┌─── Monat (1–12)
│ │ │ │ ┌─ Wochentag (0–7, 0 und 7 = Sonntag)
│ │ │ │ │
* * * * * Befehl
| Symbol | Bedeutung | Beispiel |
|---|---|---|
* | Jeder Wert | * im Stundenfeld: jede Stunde |
, | Liste | 1,15 am 1. und 15. des Monats |
- | Bereich | 1-5 Montag bis Freitag |
/ | Schritt | */10 im Minutenfeld: alle 10 Minuten |
Häufig genutzte Zeitplan-Beispiele
| Zeitplan | Bedeutung |
|---|---|
*/5 * * * * | Alle 5 Minuten |
0 * * * * | Zu jeder vollen Stunde |
30 3 * * * | Jeden Tag um 03:30 Uhr |
0 6 * * 1 | Jeden Montag um 06:00 Uhr |
0 0 1 * * | Am 1. jedes Monats um Mitternacht |
0 9-18 * * 1-5 | Werktags zwischen 09:00 und 18:00 Uhr stündlich |
@reboot | Einmal bei jedem Start des Servers |
@daily | Jeden Tag um Mitternacht |
Wenn Sie nicht sicher sind, wann ein Ausdruck ausgeführt wird, können Sie ihn auf einer Website wie crontab.guru eingeben und sich die Bedeutung anzeigen lassen.
Praktische Cronjobs
Jede Nacht ein Datenbank-Backup:
0 4 * * * /root/backup.sh >> /var/log/backup.log 2>&1
Wie Sie regelmäßige und vom Server unabhängige Backups erstellen, erklären wir ausführlich in unserer Anleitung Server-Backup.
Den Gameserver jeden Morgen neu starten:
0 6 * * * systemctl restart minecraft
Manche Gameserver, die lange laufen, belegen mit der Zeit immer mehr Arbeitsspeicher; ein täglicher Neustart zu der Uhrzeit, in der am wenigsten Spieler online sind, verhindert das. Dieses Beispiel setzt voraus, dass der Gameserver als systemd-Dienst namens minecraft läuft; der Eintrag gehört in die Crontab von root.
Alte Logdateien aufräumen:
0 5 * * 0 find /var/www/site/logs -name "*.log" -mtime +14 -delete
Löscht jeden Sonntag Logdateien, die älter als 14 Tage sind.
Prüfen, ob eine Website erreichbar ist:
*/5 * * * * curl -fsS https://ihredomain.de > /dev/null || echo "Website antwortet nicht" >> /var/log/site-check.log
Typische Fehler bei Cron
Cronjobs laufen nicht in derselben Umgebung wie derselbe Befehl im Terminal. Die meisten Jobs scheitern aus folgenden Gründen stillschweigend:
- Fehlender PATH: Cron läuft mit einem sehr kurzen
PATH; ein Befehl, der im Terminal gefunden wird, wird in Cron womöglich nicht gefunden. Schreiben Sie den vollständigen Pfad der Befehle (which nodezeigt ihn Ihnen) oder fügen Sie ganz oben in der Crontab eine ZeilePATH=ein. - Relative Pfade: Cronjobs starten im Home-Verzeichnis des Benutzers. Verwenden Sie für Skripte und Dateinamen immer vollständige Pfade wie
/home/benutzer/skript.shoder stellen Sie dem Befehlcd /ordner &&voran. - Das Zeichen
%: In der Crontab steht%für einen Zeilenumbruch. Maskieren Sie es bei Ausdrücken wiedate +%Fals\%. - Ausführungsrechte: Stellen Sie sicher, dass das Skript mit
chmod +xausführbar ist und in der ersten Zeile einen Interpreter wie#!/bin/bashangibt. - Verlorene Ausgabe: Leiten Sie Ausgabe und Fehler des Jobs in eine Datei um (
>> /var/log/job.log 2>&1). Sonst sehen Sie bei einem Fehler nicht, was die Ursache war. - Zeitzone: Cron verwendet die Zeitzone des Servers. Prüfen Sie sie mit
timedatectl; auf einem Server mit UTC laufen Jobs zu einer anderen Uhrzeit als nach Ihrer Ortszeit. - Überlappende Ausführungen: Ist ein langer Job bis zum nächsten Zeitpunkt nicht fertig, können zwei Instanzen gleichzeitig laufen. Verhindern Sie das, indem Sie dem Befehl
flock -n /tmp/job.lockvoranstellen.
Cron-Logs prüfen
So sehen Sie, ob ein Job gelaufen ist:
grep CRON /var/log/syslog
Gibt es diese Datei in aktuellen Versionen von Ubuntu und Debian nicht, verwenden Sie journalctl -u cron, unter AlmaLinux journalctl -u crond oder die Datei /var/log/cron. Das Log zeigt, dass der Job gestartet wurde; ob er erfolgreich war, erkennen Sie nur an der Ausgabedatei, in die Sie selbst umgeleitet haben.
Systemweite Cron-Dateien
Neben den Crontabs der Benutzer gibt es auch Ordner für systemweite Jobs:
/etc/cron.d/: Jobs, die Pakete und Administratoren als eigene Dateien ablegen. In diesen Zeilen steht nach den Zeitfeldern zusätzlich der Benutzername, unter dem der Job läuft./etc/cron.daily/,/etc/cron.weekly/,/etc/cron.monthly/: Ausführbare Skripte, die Sie hier ablegen, laufen einmal täglich, wöchentlich oder monatlich.
Der Job von Certbot zum Erneuern der SSL-Zertifikate und logrotate, das Logdateien rotiert, laufen zum Beispiel aus diesen Ordnern oder über systemd-Timer.
Alternative: systemd-Timer
In aktuellen Linux-Distributionen ist der systemd-Timer eine starke Alternative zu Cron. Der Job wird als Service-Datei, der Zeitplan als Timer-Datei geschrieben. Die Einrichtung ist etwas aufwendiger als bei Cron, bietet aber Vorteile:
- Die Ausgabe des Jobs landet automatisch im Log von
journalctl. - Mit der Einstellung
Persistent=truewerden Jobs, die verpasst wurden, während der Server ausgeschaltet war, beim Start nachgeholt. - Eine neue Ausführung startet erst, wenn die vorherige beendet ist.
Mit dem Befehl systemctl list-timers sehen Sie alle Timer auf Ihrem Server und den Zeitpunkt ihrer nächsten Ausführung. Für einfache Jobs ist Cron nach wie vor die schnellste Lösung; bei Jobs, bei denen Fehlersuche und Zuverlässigkeit wichtig sind, können Sie den Timer bevorzugen.
Geplante Aufgaben bei Nodesty
Auf den Nodesty-Paketen AMD Ryzen 9 9950X vServer nutzen Sie Cron und systemd-Timer dank vollem Root-Zugriff ganz nach Bedarf; wenn Sie neu in Linux sind, beginnen Sie mit unserer Anleitung Grundlegende Linux-Befehle. In unseren Webhosting-Paketen legen Sie geplante Aufgaben dagegen ohne SSH-Zugang über den Cron-Bereich von cPanel und DirectAdmin an.
Häufig gestellte Fragen
Mein Cronjob läuft nicht. Woran liegt das?
Die häufigsten Ursachen sind ein fehlender PATH, durch den der Befehl nicht gefunden wird, relative Dateipfade, fehlende Ausführungsrechte für das Skript und ein nicht maskiertes %-Zeichen in der Crontab. Leiten Sie die Ausgabe des Jobs in eine Datei um und lesen Sie die Fehlermeldung; das zeigt das Problem meist sofort.
Welche Zeitzone verwendet Cron?
Cron verwendet die Systemzeitzone des Servers. Viele Server laufen in UTC; ein Job, der um 03:00 Uhr deutscher Zeit laufen soll, entspricht in UTC 02:00 Uhr während der Winterzeit und 01:00 Uhr während der Sommerzeit. Mit dem Befehl timedatectl sehen Sie die Zeitzone des Servers und können sie bei Bedarf ändern.
Kann ich mit Cron alle 30 Sekunden einen Job ausführen?
Die kleinste Einheit von Cron ist die Minute. Für Aufgaben, die häufiger laufen müssen, schreiben Sie den Job entweder als Dienst, der in einer Schleife wartet, oder Sie verwenden einen systemd-Timer. Brauchen Sie wirklich eine Steuerung im Sekundenbereich, ist eine dauerhaft laufende Anwendung meist die bessere Lösung.
Kann ich im Webhosting Cronjobs einrichten?
Ja. In cPanel über den Bereich Cron Jobs und in DirectAdmin über Cronjobs legen Sie geplante Aufgaben ohne SSH-Zugang an. Ein echter Cronjob statt des internen Zeitplaners von WordPress sorgt besonders bei Websites mit wenigen Besuchern dafür, dass geplante Beiträge und Backups pünktlich laufen.
Wie verhindere ich, dass ein Job zweimal gleichzeitig läuft?
Ist ein lang laufender Job bis zum nächsten geplanten Zeitpunkt nicht fertig, kann eine zweite Instanz starten. Stellen Sie dem Befehl flock -n /tmp/job.lock voran; solange die vorherige Ausführung läuft, startet die neue Instanz gar nicht erst.
Gibt es Cron auf Windows-Servern?
Unter Windows gibt es kein Cron; dieselbe Aufgabe übernimmt die Aufgabenplanung (Task Scheduler). Über die grafische Oberfläche oder mit dem PowerShell-Befehl Register-ScheduledTask legen Sie Aufgaben an, die zu bestimmten Zeiten oder beim Start des Servers laufen.
Über den Autor
Nodesty-Team · Infrastruktur und Support
Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.
Verwandte Artikel

Ubuntu Upgrade: Server auf die neue LTS-Version bringen
Ubuntu Server auf die neue LTS-Version upgraden: Backup, Vorbereitung, do-release-upgrade, SSH-Verbindung, Kontrollen danach und Neuinstallation erklärt.

Was ist ein Load Balancer? So funktioniert Lastverteilung
Was ist ein Load Balancer und wofür? Methoden der Lastverteilung, Health Checks, Sessions, Load Balancing mit Nginx, HAProxy und wann Sie einen brauchen.

Laravel deployen: Anwendung auf dem vServer veröffentlichen
Laravel deployen auf dem Server: PHP-FPM, Composer, .env, Datenbank, Dateirechte, Nginx, Queue Worker, Scheduler, SSL und Updates Schritt für Schritt.