Hinweis:
- Dieses Tutorial ist in einer von Oracle bereitgestellten kostenlosen Übungsumgebung verfügbar.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte durch die für Ihre Cloud-Umgebung spezifischen Werte.
Aufgaben mit dem Crontab-Utility in Oracle Linux planen
Bevor Sie beginnen
In diesem Tutorial wird die Verwendung des Befehls crontab bei Oracle Linux erläutert.
Hintergrund
Oracle Linux kann Programme automatisch als geplante Aufgaben oder Jobs ausführen. Sie können entweder Programme planen, die als Aufgaben auf Systemebene ausgeführt werden, indem Sie die Cron-Konfiguration in /etc/cron*
bearbeiten. Sie können aber auch Programme planen, die als Jobs in Ihrer Benutzer-Crossab-Anwendung ausgeführt werden. Wenn Sie keinen Systemadministratorzugriff auf ein System haben oder die Programme, die Sie planen möchten, für Ihr Benutzerkonto spezifisch sind, bietet das crontab-Utility eine gute Möglichkeit, Programme nach einem regulären Zeitplan unter Ihren eigenen Benutzerzugangsdaten auszuführen. Mit crontab können Sie Jobs so oft wie jede Minute oder nur einmal im Jahr planen. Beachten Sie jedoch, dass der Cron-Job nicht ausgeführt wird, wenn das System während der Ausführung des Jobs heruntergefahren ist.
Beachten Sie, dass die Cron-Konfiguration bei den meisten Linux-Systemen Standard ist und seit 1975 für Unix-ähnliche Systeme verfügbar ist. Komplexere Planungslösungen sind in Systemd in Form von Timern enthalten, und Benutzer werden aufgefordert, Systemd-Timer detaillierter zu untersuchen, um spezifische Anforderungen zu erfüllen. Dieses Tutorial enthält jedoch grundlegende Schulungen, die für den durchschnittlichen Benutzer besser geeignet sind.
Voraussetzungen
- Ein System mit installiertem Oracle Linux
Ziele
In diesem Tutorial werden folgende Themen behandelt:
- Inhalt einer vorhandenen crontab-Datei auflisten
- crontab-Einträge erstellen und bearbeiten
- Auf crontab-Ausgabe zugreifen
- Vollständige crontab-Funktion für einen Benutzer entfernen
Listen Sie den Inhalt Ihrer crontab-Datei auf
Hinweis: Wenn Sie die kostenlose Übungsumgebung verwenden, finden Sie unter Oracle Linux Lab - Grundlagen Informationen zu Verbindungen und anderen Nutzungsanweisungen.
Verwenden Sie den Befehl crontab -l
, um den Inhalt der crontab-Datei aufzulisten.
crontab -l
Wenn für den Benutzer kein crontab-Eintrag vorhanden ist, wird die folgende Meldung angezeigt:
no crontab for oracle
Erstellen oder bearbeiten Sie Ihren crontab
-
Öffnen Sie die crontab-Datei mit dem Befehl
crontab –e
im Standardeditor:crontab -e
Der Standardeditor in Oracle Linux ist der vim-Editor.
-
Fügen Sie am Ende der Datei die folgende Zeile hinzu, um einen crontab-Job zu erstellen, der den echo-Befehl jede Minute ausführt:
* * * * * echo "Hello World"
Im VIM:
- Sie können zum Ende der Datei springen, indem Sie "Umschalt-g" drücken.
- Drücken Sie die Taste 'i', um den Einfügemodus zu öffnen.
- Geben Sie die crontab-Zeile ein.
- Drücken Sie die Taste 'Esc', um den Einfügemodus zu beenden.
- Geben Sie ':wq' ein, um die Datei und den Editor zu schreiben.
Dieser Schritt installiert den Crontab und aktiviert ihn sofort:
crontab: installing new crontab
-
Listen Sie die Einträge in Ihrem crontab auf, um den neuen Eintrag anzuzeigen:
crontab -l
Jeder Job wird in einer eigenen Zeile im Crontab angezeigt. Die crontab verfügt über 5 durch Leerzeichen getrennte Felder, die unterschiedliche Zeiträume definieren, die konfiguriert werden können, gefolgt von dem Befehl, der für den Job ausgeführt wird. Der Befehl kann jedem Befehl entsprechen, den Sie in der Befehlszeile des Systems ausführen können, sodass Sie Ihre eigenen Skripte ausführen oder Pipes und Umleitungsoperatoren nutzen können.
Überprüfen Sie die Ausgabe Ihres Cron-Eintrags
Kein Mail Transport Agent (MTA) ist standardmäßig auf einem minimalen Oracle Linux-System oder auf einem Oracle Linux-Plattformimage installiert. Wenn kein MTA gefunden wird, leitet der Cron-Daemon die Ausgabe von Befehlen, die im crontab angegeben sind, an den Syslog-Daemon weiter. Bei einer neuen Installation von Oracle Linux können Sie die crontab-Ausgabe in der Logdatei unter /var/log/cron
anzeigen.
Führen Sie den folgenden Befehl aus, um die von Ihrem neuen crontab-Eintrag generierte Ausgabe anzuzeigen:
sudo tail /var/log/cron
Beachten Sie, dass die Cron-Aufgabe nur jede Minute ausgeführt wird, sodass Sie möglicherweise eine Minute warten müssen, bevor Sie den Befehl ausführen. Die Ausgabe für diesen Cron-Eintrag sollte ungefähr wie folgt aussehen:
Jun 30 12:39:02 ol-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol-server CROND[68551]: (oracle) CMDOUT (Hello World)
In dieser Ausgabe wird der Benutzer angezeigt, als der Befehl ausgeführt wird, und die Befehlsausgabe wird angezeigt.
Wenn eine MTA, wie postfix oder sendmail, installiert ist, leitet cron die Ausgabe des crontab-Eintrags an die Mailspool für den Benutzer, als der crontab-Eintrag ausgeführt wird. Dies wird später in diesem Tutorial weiter erläutert.
Crontab-Zeitabfolgeoptionen
Crontab-Zeitfelder werden in der folgenden Reihenfolge definiert:
- Minute: Von 0 bis 59
- Stunde: Von 0 bis 23
- Tag: Von 1 bis 31
- Monat: Von 1 bis 12, oder der Name des Monats
- Wochentag: Von 0 bis 7 oder der abgekürzte Name des Tages. Beachten Sie, dass 0 und 7 beide für Sonntag stehen.
Sonderzeichen können in einem der Zeitfelder verwendet werden:
- Sternchen (*): Gibt an, dass der Befehl für jede Instanz des Feldes ausgeführt werden soll
- Bindestrich (-): Kann zur Angabe eines Bereichs verwendet werden. Beispiel: Im Feld für den Wochentag können Sie 1-5 angeben, um die Ausführung der Aufgabe von Montag bis Freitag zu planen, jedoch nicht am Samstag oder Sonntag.
- Komma (,): Kann zur Angabe einer Werteliste für ein Feld verwendet werden. Beispiel: Im Stundenfeld können Sie 6,18 angeben, um die Ausführung der Aufgabe um 6 Uhr und 6 Uhr zu planen.
- Schrägstrich (/): Kann zur Angabe von Schrittwerten verwendet werden. Beispiel: Sie können */15 im Feld "Minuten" angeben, um die Ausführung einer Aufgabe alle 15 Minuten zu planen.
Außerdem können Sie mit der Crontab-Erweiterung die Zeitfelder für allgemeine Zeitanforderungen ersetzen. Wichtig ist, dass diese Kurzhand auch eine Option zum Ausführen eines Befehls nach dem Neustart enthält:
- @reboot: Wird nach dem Neustart einmal ausgeführt.
- @yearly : Einmal jährlich, d.h. "0 0 1 1 *".
- @annually : Einmal jährlich, d.h. "0 0 1 1 *".
- @monthly : Einmal im Monat, d.h. "0 0 1 * *".
- @weekly : Einmal pro Woche ausführen, d.h. "0 0 * * 0".
- @daily : Einmal täglich ausführen, d.h. "0 0 * * *".
- @hourly : Einmal pro Stunde ausführen, d.h. "0 * * * * *".
Beachten Sie, dass der Crontab nur eine Granularität von 1 Minute bietet. Es ist nicht einfach, einen Crontab-Eintrag festzulegen, der häufiger ausgeführt wird als jede Minute. Wenn Sie nach einem Tool suchen, das dies verarbeiten kann, sollten Sie sich die Systemd-Timer-Einheiten ansehen.
Bearbeiten Sie die Datei crontab, um verschiedene laufende Befehle in verschiedenen Zeitabfolgen auszuführen
-
Öffnen Sie die crontab-Datei mit dem Befehl
crontab –e
im Standardeditor:crontab -e
-
Fügen Sie die folgenden Einträge zum crontab hinzu:
*/15 * * * * echo "This crontab entry runs every 15 minutes" 10 * * * * echo "This crontab entry runs at 10 minutes past every hour" 30 13 * * 3 echo "This crontab entry runs at 13h30 on every Wednesday" @reboot echo "This command runs once after a reboot event"
-
Speichern Sie die crontab-Datei und beenden Sie den Vorgang.
Crontab-Befehlssyntax
Der crontab-Befehl wird unter den Zugangsdaten des Benutzers ausgeführt, zu dem der crontab gehört, und wird mit einigen festgelegten Standardumgebungsvariablen ausgeführt. Dazu gehören:
- HOME: Das Home-Verzeichnis für den Benutzer, als der crontab ausgeführt wird
- LOGNAME: Entspricht dem Benutzernamen des Benutzers, der als crontab ausgeführt wird
- USER: Der Benutzername des Benutzers, als der crontab ausgeführt wird
- SHELL: Die Shell-Binärdatei, mit der Befehle ausgeführt werden. Standardmäßig ist dies
/bin/sh
. - PATH: Der Pfad, der für das crontab-Utility verfügbar ist. Standardmäßig ist dies
/usr/bin:/bin
.
Sie können alternative Umgebungsvariablen festlegen, indem Sie sie als Zeilen innerhalb der crontab-Liste angeben, die keine Zeitfelder enthalten. Beispiel: Wenn Sie die bash-Shell verwenden möchten und Sie alle Variablen und Einstellungen regelmäßig mit Ihrer persönlichen .bashrc
-Konfiguration importieren möchten, können Sie Ihre crontab folgendermaßen bearbeiten:
SHELL=/bin/bash
* * * * * source $HOME/.bashrc;
Da der Befehl, der für einen crontab-Job ausgeführt wird, in einer Shell-Umgebung ausgeführt wird, gilt die Standard-Shell-Syntax und kann zur Pipe- oder Umleitungsausgabe verwendet werden. Beispiel: Um die gesamte Ausgabe in /dev/null umzuleiten, die Meldungsausgabe für den Job als Ergebnis zu deaktivieren, verwenden Sie Standard-Shellumleitungen für die STDOUT- und STDERR-Ausgabe im Befehl:
* * * * * /path/to/command > /dev/null 2>&1
Alternativ können Sie die Ausgabe umleiten, um sie an eine Datei anzuhängen, mit der Sie die Befehlsausgabe bei jeder Ausführung verfolgen können:
* * * * * /path/to/command >> $HOME/command.log
Bearbeiten Sie Ihr crontab, um mit Befehlssyntax zu experimentieren
-
Öffnen Sie die crontab in einem Editor mit dem Befehl
crontab -e
. -
Fügen Sie die folgenden Einträge hinzu:
*/15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but output is redirected to /dev/null" > /dev/null 2>&1 * * * * * echo "The date and time is $(date +\%Y-\%m-\%d\ \%H:\%M:\%S)" >> $HOME/crontab.log
Beachten Sie, dass die % Zeichen im Datumsbefehl maskiert werden, da % Zeichen vom crontab-Utility in Zeilenvorschubzeichen geändert werden und alle Daten nach dem ersten % als Standardeingabe an den Befehl gesendet werden. Weitere Informationen finden Sie unter
man 5 crontab
. -
Speichern Sie die Datei und beenden Sie den Vorgang.
Innerhalb einer Minute sollte eine crontab.log-Datei im $HOME-Verzeichnis angezeigt werden. Sie können den Inhalt dieser Datei anzeigen, indem Sie Folgendes ausführen:
tail $HOME/crontab.log
Auf crontab-Ausgabe in der lokalen Mailspool zugreifen
Wenn ein MTA installiert ist, wird die gesamte crontab-Ausgabe standardmäßig an den System-Mail-Spool des Benutzers gesendet.
Hinweis: Die folgenden Anweisungen dienen nur zum Beispiel und beschreiben keine vollständige Konfiguration für einen Mail Transfer Agent (MTA). Die Konfigurationsstandardwerte sind für Ihre Installation möglicherweise nicht geeignet. Wenn Sie ein Postfix auf einem System aktivieren, finden Sie weitere Informationen zur ordnungsgemäßen Konfiguration des Postfix-E-Mail-Servers unter Oracle Linux: Postfix-E-Mail-Server installieren.
Damit Crontab-Mail ordnungsgemäß funktioniert, müssen Sie eine MTA korrekt installieren, konfigurieren und aktivieren. Für diese Übung können Sie einfach die folgenden Schritte ausführen, damit der postfix-MTA lokale E-Mails verarbeiten kann:
-
Installieren Sie das postfix-Package:
sudo dnf install -y postfix
-
Aktivieren und starten Sie den Postfix-Service. Die Standardkonfiguration aktiviert das Postfix nur als lokale Zustellungs-MTA:
sudo systemctl enable --now postfix.service
-
Starten Sie den Crond-Service neu, damit er die Postfix-MTA für die Mailzustellung verwendet:
sudo systemctl restart crond.service
Wenn Sie Ihr crontab nicht so konfiguriert haben, dass die Ausgabe an eine alternative E-Mail-Adresse umgeleitet oder die Ausgabe für Ihre Cron-Jobs verworfen wird, wird die Ausgabe für jeden Job automatisch an den lokalen Mailspool für den Benutzer zugestellt. Der Mailspool wird in der Regel als einzelne E-Mail-Datei gespeichert, auf die unter /var/spool/mail/$USER zugegriffen werden kann. Wenn Sie die letzte Aktivität einfach überwachen, ist es am einfachsten, diese Datei so anzupassen, dass die E-Mail während der Zustellung angezeigt wird:
tail -f /var/spool/mail/$USER
Um die Ausgabe jedes Cron-Jobs in einer verwaltbaren Schnittstelle zu prüfen, installieren Sie das mailx-Package, und verwenden Sie den Befehl mail
, um den Inhalt der Mailspool anzuzeigen:
sudo dnf install -y mailx
mail
Mail wird wie folgt aufgelistet:
Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/oracle": 1 messages 1 new
>N 1 (Cron Daemon) Wed Aug 5 23:48 30/1436 "Cron oracle
&
Geben Sie die Nummer der anzuzeigenden E-Mail-Nachricht ein. Beispiel: Geben Sie 1 ein, um die erste Nachricht in der Warteschlange anzuzeigen:
& 1
Hello World
Verwenden Sie den Befehl header
, um zur Liste der E-Mail-Header zurückzukehren, oder verwenden Sie den Befehl quit
, um die Anwendung zu beenden.
Sie können die E-Mail-Adresse ändern, die für die E-Mail-Cron-Ausgabe verwendet wird, indem Sie die MAILTO-Umgebungsvariable in Ihrem crontab festlegen. Ihr System muss jedoch für die Verarbeitung der externen E-Mail-Zustellung konfiguriert sein. Wenn Sie die MAILTO-Umgebung auf einen leeren Wert setzen, wird die Ausgabe verworfen, und es wird keine E-Mail für einen Cron-Job im crontab gesendet.
Gesamtes crontab entfernen
Verwenden Sie den Befehl crontab -r
, um die gesamte crontab-Datei für einen Benutzer zu entfernen.
crontab -r
Mit diesem Befehl werden alle Cron-Jobeinträge entfernt, die Sie für Ihren Benutzer angegeben haben. Wenn Sie nur einen bestimmten Jobeintrag entfernen möchten, verwenden Sie crontab -e
, um die crontab-Datei zu bearbeiten und die Zeile für den Job zu entfernen, den Sie entfernen möchten.
Weitere Informationen zu diesen Features finden Sie unter man 5 crontab
und man systemd.timer
.
Videodemonstration
Eine Videodemonstration finden Sie unter Oracle Linux Automating Tasks Cron Utility, wenn Sie mehr Informationen zum Crontab-Utility bei Oracle Linux benötigen.
Weitere Informationen
Weitere Lernressourcen
Sehen Sie sich andere Übungen auf der Website docs.oracle.com/learn an, oder greifen Sie auf Inhalte zu, die Sie über den Oracle Learning-Kanal YouTube benötigen. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie unter Oracle Help Center.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49758-04
July 2022
Copyright © 2021, Oracle and/or its affiliates.