Cronjob unter Linux einrichten

Mit crontab -e öffnen, eine Zeile eintragen, speichern – mehr braucht ein Cronjob auf einem Linux-Server nicht. Diese Seite zeigt die drei Schritte, wie Sie vorhandene Cronjobs anzeigen, wo Sie sehen, ob sie gelaufen sind, und die Fehler, über die fast jeder einmal stolpert.

In drei Schritten

1. Die Crontab öffnen

crontab -e

Das öffnet die Crontab des angemeldeten Benutzers. Beim ersten Mal fragt Linux nach einem Editor – nano ist für Einsteiger die einfachste Wahl. Soll der Job als ein anderer Benutzer laufen, etwa als Webserver, nehmen Sie sudo crontab -e -u www-data.

2. Eine Zeile eintragen

30 2 * * * /usr/bin/php /var/www/shop/cron.php >> /var/log/shop-cron.log 2>&1

Vorne stehen die fünf Zeitfelder (Minute, Stunde, Tag, Monat, Wochentag), dahinter der Befehl. Diese Zeile startet das Skript jede Nacht um 2:30 Uhr und schreibt seine Ausgabe samt Fehlermeldungen in eine Logdatei. Wie die Felder genau funktionieren, steht in der Crontab-Syntax, den passenden Ausdruck baut der Crontab-Generator.

3. Speichern

In nano mit Strg+O, Enter und Strg+X, in vim mit Esc und :wq. Linux bestätigt mit crontab: installing new crontab – ab der nächsten Minute gilt der neue Zeitplan, ein Neustart ist nicht nötig.

Cronjobs anzeigen

Die eigenen Einträge zeigt

crontab -l

Die eines anderen Benutzers sehen Sie mit sudo crontab -l -u name. Alle Benutzer auf einmal:

for u in $(cut -d: -f1 /etc/passwd); do echo "## $u"; sudo crontab -l -u "$u" 2>/dev/null; done

Nicht jeder Cronjob steht in einer Benutzer-Crontab. Auch diese Orte gehören dazu:

OrtWas dort steht
/etc/crontabsystemweite Crontab mit einer zusätzlichen Spalte für den Benutzer
/etc/cron.d/Crontabs von Paketen, ebenfalls mit Benutzerspalte
/etc/cron.daily/Skripte, die einmal täglich laufen – dazu cron.hourly, cron.weekly und cron.monthly
systemctl list-timerssystemd-Timer, die auf neueren Systemen manche Aufgaben übernehmen

Zum Löschen entfernen Sie die Zeile mit crontab -e. Vorsicht bei crontab -r: Das löscht die ganze Crontab ohne Rückfrage.

Ist der Cronjob gelaufen?

Unter Debian und Ubuntu steht jeder Start im Systemprotokoll:

grep CRON /var/log/syslog
journalctl -u cron --since today

Unter Red Hat, AlmaLinux und Rocky Linux heißt der Dienst crond, das Protokoll liegt in /var/log/cron. Ob der Dienst überhaupt läuft, zeigt systemctl status cron beziehungsweise crond.

Das Protokoll sagt nur, dass der Befehl gestartet wurde. Ob er geklappt hat, steht in seiner Ausgabe – deshalb die Umleitung >> datei.log 2>&1 in Schritt 2.

Die vier häufigsten Fehler

Relative Pfade

Cron startet mit einem sehr kurzen PATH und ohne Ihre Shell-Einstellungen. Schreiben Sie Programme und Dateien immer mit vollem Pfad, also /usr/bin/php statt php. Wo ein Programm liegt, verrät which php.

Das Prozentzeichen

In der Crontab beendet % den Befehl. Für ein Datum im Dateinamen schreiben Sie date +\%F statt date +%F.

Die letzte Zeile

Manche Cron-Versionen ignorieren die letzte Zeile, wenn danach kein Zeilenumbruch kommt. Lassen Sie am Ende der Crontab einfach eine leere Zeile.

Rechte und Benutzer

Ein Skript braucht Ausführungsrechte (chmod +x) und läuft als der Benutzer, dem die Crontab gehört – mit dessen Rechten auf Dateien und Ordner.

Läuft er trotzdem nicht? Die Fehlersuche Schritt für Schritt geht alle Ursachen durch.

Beispiele für die Crontab

ZeileBedeutung
*/5 * * * * /usr/bin/php /var/www/app/cron.phpalle 5 Minuten ein PHP-Skript
0 3 * * * /usr/local/bin/backup.shjede Nacht um 3:00 Uhr eine Sicherung
0 6 * * 1-5 curl -fsS https://example.com/cron.php > /dev/nullwerktags um 6:00 Uhr eine Adresse aufrufen
0 0 1 * * /usr/local/bin/monatsbericht.sham 1. jedes Monats um Mitternacht
@reboot /usr/local/bin/start.sheinmal nach jedem Neustart des Servers

Mehr fertige Ausdrücke zum Abschreiben stehen in der Crontab-Syntax.

Wissen, ob er läuft – und ohne eigenen Server

Cron sagt niemandem Bescheid, wenn ein Job ausfällt oder der Server steht. Mit einem Heartbeat meldet sich der Job nach jedem Lauf bei Cronjob.de – bleibt die Meldung aus, bekommen Sie eine Nachricht per E-Mail, Telegram, Slack oder Teams.

Kein Zugang zur Crontab, etwa auf einem Webspace? Dann ruft Cronjob.de Ihr Skript über seine Adresse auf, bis zu jede Minute: Cronjob auf dem Webspace einrichten.

Häufige Fragen

Wie zeige ich alle Cronjobs auf einem Linux-Server an?
Ihre eigenen mit crontab -l, die eines anderen Benutzers mit sudo crontab -l -u name. Dazu kommen die systemweiten Einträge in /etc/crontab und /etc/cron.d/, die Skripte in /etc/cron.daily/ und den Geschwistern sowie auf neueren Systemen die systemd-Timer (systemctl list-timers).
Wo sehe ich, ob mein Cronjob gelaufen ist?
Im Systemprotokoll: unter Debian und Ubuntu mit grep CRON /var/log/syslog oder journalctl -u cron, unter Red Hat, AlmaLinux und Rocky in /var/log/cron. Dort steht nur, dass der Befehl gestartet wurde – ob er geklappt hat, zeigt die Ausgabe, die Sie in eine Datei umleiten.
Brauche ich Root-Rechte für einen Cronjob?
Nein. Jeder Benutzer hat seine eigene Crontab und bearbeitet sie mit crontab -e. Root brauchen Sie nur für die Crontab anderer Benutzer und für die systemweiten Dateien unter /etc.
Was mache ich ohne eigenen Linux-Server?
Auf einem Webspace gibt es oft keinen Zugang zur Crontab. Dann lässt sich das Skript über seine Adresse aufrufen: Cronjob.de ruft sie nach Ihrem Zeitplan auf, bis zu jede Minute, und meldet, wenn der Aufruf scheitert.
Wie merke ich, wenn ein Cronjob auf meinem Server ausfällt?
Cron selbst sagt niemandem Bescheid. Hängen Sie an die Zeile einen Heartbeat an: Nach jedem Lauf meldet sich der Job bei Cronjob.de, und bleibt die Meldung aus oder kommt sie mit einem Fehler, bekommen Sie eine Nachricht.

Cronjobs ohne eigenen Server

Fünf Cronjobs sind dauerhaft kostenlos, ohne Kreditkarte. Die ersten 14 Tage testen Sie alles, auch die Meldung bei Fehlern.

Kostenlos starten Preise ansehen