Cronjobs unter Linux einrichten mit crontab – Anleitung

Backups, Aufräum-Skripte, regelmäßige Updates: Viele Aufgaben auf einem Linux-Server sollen automatisch zu festen Zeiten laufen. Genau dafür gibt es Cron. In dieser Anleitung lernst du, wie du Cronjobs unter Linux mit crontab einrichtest – von der Syntax der fünf Zeitfelder über praktische Beispiele bis zu Logging und den häufigsten Fehlern.

Was ist Cron?

Cron ist der klassische Zeitplandienst unter Linux. Ein Hintergrunddienst (der „cron daemon“) prüft jede Minute, ob eine geplante Aufgabe fällig ist, und führt sie aus. Die einzelnen Aufträge nennt man Cronjobs. Sie werden in sogenannten crontab-Dateien („cron table“) definiert – pro Benutzer eine eigene.


Die crontab bearbeiten

Deine persönliche crontab bearbeitest du mit crontab -e. Beim ersten Aufruf fragt Linux nach einem Editor (meist nano). Die wichtigsten Befehle:

BefehlWirkung
crontab -eEigene crontab bearbeiten
crontab -lEigene crontab anzeigen
crontab -rEigene crontab löschen (Vorsicht!)
sudo crontab -e -u benutzercrontab eines anderen Benutzers bearbeiten

Die crontab-Syntax verstehen

Jede Zeile in der crontab 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)
# │ │ │ │ │
# * * * * *  auszuführender-befehl

Die fünf Felder im Überblick:

FeldBereichBedeutung
10–59Minute
20–23Stunde
31–31Tag des Monats
41–12Monat
50–7Wochentag (0 und 7 = Sonntag)

Sonderzeichen

  • * – jeder Wert (z. B. jede Minute, jede Stunde).
  • , – Aufzählung: 0,15,30,45 bedeutet zur Minute 0, 15, 30 und 45.
  • - – Bereich: 1-5 im Wochentagsfeld bedeutet Montag bis Freitag.
  • / – Schrittweite: */10 im Minutenfeld bedeutet „alle 10 Minuten“.

Praktische Beispiele

Diese Zeilen zeigen typische Zeitpläne – kopiere sie als Ausgangspunkt in deine crontab:

Cron-AusdruckBedeutung
*/5 * * * *Alle 5 Minuten
0 * * * *Jede volle Stunde
30 2 * * *Täglich um 02:30 Uhr
0 3 * * 0Jeden Sonntag um 03:00 Uhr
0 0 1 * *Am 1. jedes Monats um Mitternacht
0 9-17 * * 1-5Werktags stündlich zwischen 9 und 17 Uhr

Ein konkreter Job, der täglich um 2:30 Uhr ein Backup-Skript ausführt, sieht so aus:

30 2 * * * /home/user/scripts/backup.sh

Spezielle Kurzschreibweisen

Statt der fünf Felder kannst du auch praktische Schlüsselwörter verwenden:

KürzelEntspricht
@rebootEinmal bei jedem Systemstart
@hourly0 * * * *
@daily / @midnight0 0 * * *
@weekly0 0 * * 0
@monthly0 0 1 * *
@yearly0 0 1 1 *

System-Crontab und cron.d

Neben den benutzereigenen crontabs gibt es systemweite Cronjobs. Sie unterscheiden sich in einem wichtigen Punkt: Bei ihnen steht vor dem Befehl zusätzlich der Benutzer, unter dem der Job laufen soll.

  • /etc/crontab – zentrale System-crontab (mit Benutzerfeld).
  • /etc/cron.d/ – Verzeichnis für einzelne Job-Dateien (ideal für Pakete und eigene Skripte).
  • /etc/cron.daily/, cron.weekly/, cron.monthly/ – Skripte, die einfach in diese Ordner gelegt werden und entsprechend regelmäßig laufen.

Eine Zeile in /etc/cron.d/mein-job mit Benutzerfeld sieht so aus:

30 2 * * * root /usr/local/bin/mein-skript.sh

Ausgabe und Logging

Standardmäßig verschickt Cron die Ausgabe eines Jobs per lokaler E-Mail an den Benutzer. Praktischer ist es meist, die Ausgabe in eine Logdatei umzuleiten. Mit >> datei 2>&1 landen sowohl normale Ausgabe als auch Fehlermeldungen im Log:

30 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Möchtest du Benachrichtigungen per Mail an eine bestimmte Adresse senden, setze am Anfang der crontab die Variable MAILTO:

MAILTO="[email protected]"

Wann welcher Job vom System gestartet wurde, kannst du zudem im System-Log nachvollziehen:

grep CRON /var/log/syslog
# oder auf systemd-Systemen:
journalctl -u cron

Häufige Fehler und wie du sie vermeidest

  • Falscher PATH: Cron läuft mit einer minimalen Umgebung. Verwende in Skripten absolute Pfade (z. B. /usr/bin/php statt nur php) oder setze am Anfang der crontab eine PATH-Variable.
  • Das Prozentzeichen: In crontab-Zeilen hat % eine Sonderbedeutung (Zeilenumbruch für die Eingabe). Willst du es wörtlich nutzen, maskiere es mit \%.
  • Skript nicht ausführbar: Stelle sicher, dass dein Skript ausführbar ist (chmod +x skript.sh) und mit einer Shebang-Zeile wie #!/bin/bash beginnt.
  • Fehlende Leerzeile am Ende: Manche cron-Implementierungen verlangen, dass die crontab mit einer leeren Zeile endet.

Tipp: Prüfe die richtige Version deiner Programme vorab – etwa mit unserer Anleitung PHP-Version unter Linux prüfen, bevor du einen PHP-Cronjob einrichtest.


Fazit

Mit crontab automatisierst du wiederkehrende Aufgaben unter Linux zuverlässig. Der Schlüssel ist die Syntax der fünf Zeitfelder – hast du sie einmal verinnerlicht, richtest du jeden Zeitplan in Sekunden ein. Achte auf absolute Pfade und ein sauberes Logging, dann laufen deine Cronjobs stabil im Hintergrund. Ein typischer Anwendungsfall ist das automatische Aufräumen von Docker. Für dauerhaft laufende Dienste ist statt Cron ein systemd-Service die bessere Wahl – und die passenden Bash-Skripte schreibst du so. Wenn du deine Skripte per SSH auf den Server bringst, hilft dir SSH-Key hinterlegen.

Siehe auch  SSH-Server absichern: Port, Root-Login & Fail2ban
Nach oben scrollen