Der Anfängerleitfaden zur Verwendung von Cron in Linux

Cron ist ein einfaches UNIX-Dienstprogramm, das die Ausführung und Planung von Befehlen auf Ihrem Computer verwaltet. Es wurde 1987 von Paul Vixie entwickelt und ist seitdem ein unverzichtbares Werkzeug in Linux-basierten Betriebssystemen für Administratoren und Benutzer gleichermaßen geworden.
Heutzutage gibt es eine Reihe von Cron-Implementierungen und -Neuschreibungen, die Sie problemlos in Ihrem Linux-System installieren können. Trotz der Unterschiede teilen diese Programme alle die gleiche Vixie-Cron-Abstammung.
Dieser Artikel soll daher einen grundlegenden Überblick darüber geben, wie das ursprüngliche Vixie-Cron funktioniert, seine Syntax und wie Sie es verwenden können, um Aufgaben in Ihrem Linux-System zu planen.
Inhaltsverzeichnis
- Wie funktioniert Cron?
- Crontab: Das Herz von Cron
- System-Crontabs
- Überprüfung der Cron-Aktivität
- Häufig gestellte Fragen
Außerdem lesen: So erstellen Sie einfach Cron-Jobs in Linux mit Zeit
Wie funktioniert Cron?
Cron ist ein unglaublich einfaches UNIX-Dienstprogramm. Es funktioniert in zwei Teilen. Cron läuft zunächst als Hintergrundprozess, der startet, wenn Sie Ihr System zum ersten Mal booten.
Von dort aus liest es jede Minute eine bestimmte Datei. Diese Datei enthält eine Liste von Befehlen, die wiederum aus einem Zeitcode und einem Dateipfad für jedes Skript oder Programm bestehen, das Sie ausführen möchten.

Dieser Ansatz ermöglicht es Cron, in großen Systemen äußerst flexibel zu sein. Moderne Cron-Implementierungen wie Cronie führen zum Beispiel nur eine einzige Instanz von Cron aus, selbst wenn diese Maschine mehrere Benutzer hostet.

Cronie macht dies möglich, indem es lokale Crontabs für jeden Benutzer bereitstellt, die im System installiert sind. Somit muss Cron nur wissen, wer den Crontab besitzt, welches Berechtigungslevel dieser Benutzer hat und welche Befehle im Crontab stehen.
Dies macht das System nicht nur effizienter, sondern auch sicherer, indem die Menge an privilegierten Programmen im Speicher reduziert wird.
Crontab: Das Herz von Cron
Jede Cron-Implementierung verwendet eine Form von Crontab. Dies ist eine einfache Textdatei, die alle Befehle enthält, die Cron für diesen bestimmten Benutzer ausführen wird. Wie oben beschrieben, hat jeder Benutzer im System seinen eigenen Crontab. Er kann diesen mit dem folgenden Befehl anzeigen:
crontab -l
Dies gibt den Inhalt des Crontabs des aktuellen Benutzers in die Standardausgabe aus. Dies kann äußerst hilfreich sein, wenn Sie schnell sehen möchten, welche Befehle Cron für diesen Benutzer ausführt.
Um ihn zu bearbeiten, müssen Sie den Befehl ausführen:
crontab -eDadurch wird Cron angewiesen, Ihren Standardtexteditor auszuführen und die Crontab-Datei darin zu laden. Dies ermöglicht es Ihnen, die Crontab-Datei zu bearbeiten.

Außerdem lesen: So verwenden Sie Systemd-Timer als Ersatz für Cron
Die Crontab-Syntax
Die Syntax der Crontab-Datei ist unglaublich einfach. Eine einzelne Zeile in dieser Datei gibt einen entsprechenden Befehl an, der für diesen bestimmten Benutzer ausgeführt werden muss. Die allgemeine Form eines Crontab-Befehls sieht folgendermaßen aus:
m h d mon dow [flags]commandDas Zeitintervall ist ein Feld mit fünf Ziffern, in dem Sie Cron mitteilen können, wie oft Sie einen Befehl ausführen möchten. Dies ist das Kernmerkmal jeder Cron-Implementierung und ermöglicht es Ihnen, sowohl spezifisch als auch flexibel zu sein, wie Cron wiederkehrende Aufgaben behandelt.
- m = Minute zwischen 0 und 59
- h = Stunde zwischen 0 und 23
- d = Tag des Monats zwischen 1 und 31
- mon = Monat zwischen 1 und 12
- dow = Wochentag zwischen 0 und 6. Null ist Sonntag.
Das Feld flags ist eine Reihe von Optionen, die ändern, wie Cron sich bei einem einzelnen Befehl verhält. Beispielsweise können Sie die Option -n hinzufügen, um zu verhindern, dass Cron Systemmails sendet.
Das Feld command ist der Befehl, den Cron in festgelegten Intervallen ausführen wird. Dies kann entweder ein von Ihnen geschriebenes Shell-Skript oder ein Programmpfad mit Flags sein.

Wenn Sie dies wissen, können Sie all diese Elemente in einer einzigen Crontab-Zeile kombinieren, um spezifische Zeitintervalle für Ihre Aufgaben zu erstellen. Zum Beispiel kann ich ein Skript auf meinem Ubuntu-System jeden 24. Juli um 2:30 Uhr ausführen, indem ich die folgende Crontab-Zeile schreibe:
302247*/home/$USER/myscript.sh
Hinweis: Es wird empfohlen, einen Cronjob zu einer “ungewöhnlichen” Anzahl von Minuten (11, 27, 34 usw.) auszuführen, um zu vermeiden, dass verschiedene Cron-Jobs sich überschneiden.
Kurzcodes
Crontab erlaubt Ihnen, einige Kurzcodes zu verwenden, um Ihre Cron-Einträge leichter lesbar zu machen.
@reboot– Einmal bei Start ausführen@yearly– Einmal im Jahr ausführen, “0 0 1 1 *”.@annually– dasselbe wie @yearly@monthly– Einmal im Monat ausführen, “0 0 1 “@weekly– Einmal pro Woche ausführen, “0 0 0”@daily– Einmal pro Tag ausführen, “0 0 *”@midnight– dasselbe wie @daily@hourly– Einmal pro Stunde ausführen, “0 “
Beispielsweise:
@daily ramces /home/ramces/.scripts/file-backup.shDer @reboot-Kurzbefehl ermöglicht es Ihnen, Skripte zu erstellen, die beim Start ausgeführt werden:
@reboot /home/ramces/.scripts/bootup.shDies kann äußerst hilfreich sein, wenn Sie sicherstellen möchten, dass Befehle sofort nach dem Einschalten des Geräts ausgeführt werden.
Hinweis: Je nach Systemkonfiguration kann der @reboot-Kurzbefehl möglicherweise nicht wie beabsichtigt auf Ihrem System funktionieren.
System-Crontabs
Ein weiteres brillantes Merkmal von Cron ist, dass es wiederkehrende systemweite Aufgaben verwalten kann, da Sie auch Root-Crontab-Dateien erstellen können. Dies kann äußerst hilfreich sein, wenn Sie die Systemwartung und -updates automatisieren möchten.
Um einen Root-Crontab zu erstellen, müssen Sie einfach sudo mit dem Befehl verwenden oder sich in Ihr Root-Konto einloggen:
sudo crontab -e
Der System-Crontab folgt im Wesentlichen dem gleichen Format wie der Benutzer-Crontab. Ein wesentlicher Unterschied zwischen beiden besteht jedoch darin, dass der Root-Crontab es Ihnen ermöglicht, Befehle als beliebiger Benutzer im System auszuführen:
m h d mon dow user [flags]"command"Damit können Sie sowohl Benutzer- als auch Root-basierten wiederkehrenden Befehle innerhalb desselben Crontabs erstellen:
302 sun root /bin/apt update
305* ramces /home/ramces/.scripts/file-backup.shAuf diese Weise kann ich die Berechtigungen meiner Dateien beibehalten, während ich auch einen einzigen Ort habe, an dem ich die Befehle bearbeiten kann, die ich ausführen möchte.

Außerdem lesen: Warum und wie Sie Ihre Sudoers-Datei in Linux bearbeiten
Bearbeiten von Cron-Einträgen als anderer Benutzer
Wenn Sie anstelle der Bearbeitung des Crontabs als Root-Benutzer einen Cron-Job als ein anderer Benutzer planen möchten, ist dies auch mit dem -u-Flag möglich.
sudo crontab -u username -eUm beispielsweise einen Cron-Job als Benutzer “www-data” auszuführen, verwenden Sie den folgenden Befehl:
sudo crontab -u www-data -eAußerdem lesen: So speichern Sie die Terminalausgabe in einer Datei in Linux
Überprüfung der Cron-Aktivität
Obwohl Sie jetzt bereit sind, bestimmte Befehle oder Skripte auszuführen, möchten Sie vielleicht sicherstellen, dass sie ausgeführt wurden. In Cron ist eingebaut, dass, sobald ein Befehl ausgeführt wird, eine E-Mail an den Cron-Besitzer gesendet wird. Dies kann mit der Variablen „MAILTO“ geändert werden.

Das Hinzufügen von [email protected] sendet alle Berichte über Cron-Jobs an eine bestimmte E-Mail-Adresse. Diese Variable kann normalerweise ganz oben auf dem Bearbeitungsbildschirm der Crontab gefunden werden. Wenn sie dort nicht vorhanden ist, können Sie die Variable hinzufügen, und sie funktioniert wie erwartet.
Mehrere E-Mail-Adressen können durch ein Komma getrennt werden. Wenn Sie einen anderen Befehl an eine andere Adresse senden möchten, können Sie den MAILTO-Befehl direkt über dem Befehl hinzufügen. Befehle, die nach diesem MAILTO folgen, werden an die neue Adresse gesendet. Wenn Sie MAILTO= leer lassen, werden die Benachrichtigungen an den Besitzer des Cron-Eintrags gesendet.
Wenn Sie keine E-Mail erhalten möchten, können Sie auch die Cron-Protokolle überprüfen. In den meisten Systemen erfordert der Zugriff auf die Cron-Protokolle Superuser-Berechtigungen. Das Cron-Protokoll befindet sich unter „/var/log“. Die Cron- oder Syslog-Datei zeigt das Protokoll der ausgeführten Cron-Einträge an.
sudogrep crontab syslogHäufig gestellte Fragen
Warum wird mein Cron-Befehl jede Minute statt einmal pro Stunde ausgeführt?
Dies ist eine der häufigsten Fehlerquellen beim Verwalten von Crontabs. Standardmäßig bedeutet das Hinzufügen eines Sternchenwerts in einem Zeitcode, dass es für jede mögliche Instanz dieses Wertes ausgeführt wird. Ein Wert von 0 12 * * * würde Cron mitteilen, dass Sie einen Befehl einmal täglich um 12:00 Uhr ausführen möchten.
Die meisten Anfänger schreiben jedoch oft denselben Zeitcode als * 12 * * *. Auf diese Weise wird der Befehl einmal pro Minute von 12:00 Uhr bis 12:59 Uhr ausgeführt. Daher ist es eine gute Praxis, eine 0 im Minutenfeld zu schreiben, um sicherzustellen, dass der Befehl nur einmal ausgeführt wird.
Gibt es noch andere Optionen, die ich mit Cron verwenden kann?
Neben den Variablen -n und MAILTO können Sie auch den Befehl -s verwenden, um dem Programm zu sagen, dass es beim Ausführen von Befehlen streng sein soll. Diese Option zwingt Cron dazu, sich nur auf den aktuellen Befehl zu konzentrieren, bis dieser abgeschlossen ist. Dies kann äußerst hilfreich sein, wenn Ihr Gerät eine Reihe von Befehlen verwendet, die in einer bestimmten Reihenfolge ausgeführt werden müssen.
Sie können auch die Variable SHELL verwenden, um Cron zu veranlassen, eine andere Shell für seine Befehle zu verwenden. Beispiel: SHELL=/bin/ksh