Zurück zum Blog

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.

Nodesty-Team5 Min. LesezeitServer
Der Schriftzug Cron mit crontab, Schedules und Logs auf dunklem Nodesty-Hintergrund

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
SymbolBedeutungBeispiel
*Jeder Wert* im Stundenfeld: jede Stunde
,Liste1,15 am 1. und 15. des Monats
-Bereich1-5 Montag bis Freitag
/Schritt*/10 im Minutenfeld: alle 10 Minuten

Häufig genutzte Zeitplan-Beispiele

ZeitplanBedeutung
*/5 * * * *Alle 5 Minuten
0 * * * *Zu jeder vollen Stunde
30 3 * * *Jeden Tag um 03:30 Uhr
0 6 * * 1Jeden Montag um 06:00 Uhr
0 0 1 * *Am 1. jedes Monats um Mitternacht
0 9-18 * * 1-5Werktags zwischen 09:00 und 18:00 Uhr stündlich
@rebootEinmal bei jedem Start des Servers
@dailyJeden 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 node zeigt ihn Ihnen) oder fügen Sie ganz oben in der Crontab eine Zeile PATH= 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.sh oder stellen Sie dem Befehl cd /ordner && voran.
  • Das Zeichen %: In der Crontab steht % für einen Zeilenumbruch. Maskieren Sie es bei Ausdrücken wie date +%F als \%.
  • Ausführungsrechte: Stellen Sie sicher, dass das Skript mit chmod +x ausführbar ist und in der ersten Zeile einen Interpreter wie #!/bin/bash angibt.
  • 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.lock voranstellen.

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=true werden 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.

Nodesty

Ü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

Starte deinen Server jetzt.

Erstellen, wachsen und skalieren Sie Ihre Projekte grenzenlos auf der Premium-Infrastruktur von Nodesty.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································