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:
| Ort | Was dort steht |
|---|---|
| /etc/crontab | systemweite 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-timers | systemd-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
| Zeile | Bedeutung |
|---|---|
| */5 * * * * /usr/bin/php /var/www/app/cron.php | alle 5 Minuten ein PHP-Skript |
| 0 3 * * * /usr/local/bin/backup.sh | jede Nacht um 3:00 Uhr eine Sicherung |
| 0 6 * * 1-5 curl -fsS https://example.com/cron.php > /dev/null | werktags um 6:00 Uhr eine Adresse aufrufen |
| 0 0 1 * * /usr/local/bin/monatsbericht.sh | am 1. jedes Monats um Mitternacht |
| @reboot /usr/local/bin/start.sh | einmal 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 mitsudo crontab -l -u name. Dazu kommen die systemweiten Einträge in/etc/crontabund/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/syslogoderjournalctl -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