Hinweis:
- Dieses Tutorial steht in einer von Oracle bereitgestellten kostenlosen Übungsumgebung zur Verfügung.
- Er verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, Mandanten und Compartments. Ersetzen Sie diese Werte beim Durchführen Ihrer Übung durch spezifische Werte für Ihre Cloud-Umgebung.
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. Dieses Tutorial richtet sich an Oracle Linux 8-Benutzer, die Befehle sind jedoch auch in anderen Oracle Linux-Releases verfügbar.
Hintergrund
Oracle Linux kann Programme automatisch als geplante Aufgaben oder Jobs ausführen. Sie können Programme so planen, dass sie als Aufgaben auf Systemebene ausgeführt werden, indem Sie die Cron-Konfiguration in /etc/cron*
bearbeiten. Sie können Programme auch so planen, dass sie als Jobs in der Benutzer-Crontablage ausgeführt werden. Wenn Sie keinen Systemadministratorzugriff auf ein System haben oder die Programme, die Sie planen möchten, spezifisch für Ihr Benutzerkonto sind, bietet das crontab-Utility einen guten Mechanismus, mit dem Programme regelmäßig unter Ihren eigenen Benutzerzugangsdaten ausgeführt werden. In der Registerkarte "crontab" können Sie die Ausführung von Jobs so oft wie jede Minute oder nur einmal pro Jahr planen. Beachten Sie jedoch, dass der Cron-Job nicht ausgeführt wird, wenn das System während der geplanten Ausführung des Jobs heruntergefahren ist.
Dieses Tutorial richtet sich an Oracle Linux 8-Benutzer, aber die crontab ist auch für Oracle Linux 7 verfügbar. Der Inhalt dieses Tutorials sollte gleichermaßen auf dieser Plattform gelten. Beachten Sie, dass die Cron-Konfiguration bei den meisten Linux-Systemen standardmäßig verwendet wird 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 eingehender 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:
- Inhalt vorhandener crontab-Dateien auflisten
- crontab-Einträge erstellen und bearbeiten
- Auf crontab-Ausgabe zugreifen
- Vollständige Registerkarte für einen Benutzer entfernen
Listen Sie den Inhalt Ihrer crontab-Datei auf
Hinweis: Bei der Verwendung der kostenlosen Übungsumgebung finden Sie unter Oracle Linux Lab Basics für Verbindungen und weitere Verwendungsanweisungen.
Verwenden Sie den Befehl crontab -l
, um den Inhalt Ihrer 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 die Registerkarte
-
Verwenden Sie den Befehl
crontab –e
, um die crontab-Datei im Standardeditor zu öffnen:crontab -e
Der Standardeditor in Oracle Linux 8 ist der Vim-Editor.
-
Fügen Sie die folgende Zeile am Ende der Datei hinzu, um einen crontab-Job zu erstellen, der den echo-Befehl jede Minute ausführt:
* * * * * echo "Hello World"
In vim:
- Sie können zum Ende der Datei springen, indem Sie "Umschalt-g" drücken.
- Drücken Sie die Taste "i", um in den Einfügemodus zu wechseln.
- 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.
In diesem Schritt wird das crontab installiert und sofort aktiviert:
crontab: installing new crontab
-
Listen Sie die Einträge in Ihrer Registerkarte auf, um den neuen Eintrag anzuzeigen:
crontab -l
Jeder Job wird in einer eigenen Zeile in der Registerkarte angezeigt. Die crontab-Datei enthält 5 durch Leerzeichen getrennte Felder, die verschiedene Zeiträume definieren, die konfiguriert werden können, gefolgt vom 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. So können Sie Ihre eigenen Skripte ausführen oder Pipes und Umleitungsoperatoren nutzen.
Überprüfen Sie die Ausgabe des Cron-Eintrags
Standardmäßig ist kein Mail Transport Agent (MTA) auf einem minimalen Oracle Linux-System oder auf einem Oracle Linux-Plattformimage installiert. Wird kein MTA gefunden, leitet der Cron-Daemon die Ausgabe von Befehlen, die in crontab angegeben sind, an den Syslog-Daemon weiter. Bei einer neuen Installation von Oracle Linux 8 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. Sie müssen also möglicherweise eine Minute warten, bevor Sie den Befehl ausführen. Die Ausgabe für diesen Cron-Eintrag sollte in etwa wie folgt aussehen:
Jun 30 12:39:02 ol8-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol8-server CROND[68551]: (oracle) CMDOUT (Hello World)
Diese Ausgabe zeigt den Benutzer, als ob der Befehl ausgeführt wird, den ausgeführten Befehl und die Befehlsausgabe.
Wenn ein MTA wie postfix oder sendmail installiert ist, leitet cron die Ausgabe vom crontab-Eintrag an den Mailspool für den Benutzer weiter, als der crontab-Eintrag ausgeführt wird. Weitere Informationen finden Sie weiter unten in diesem Tutorial.
Crontab-Zeitreihenfolgeoptionen
Crontab-Zeitfelder werden in der folgenden Reihenfolge definiert:
- Minute: 0 bis 59
- Stunde: 0 bis 23
- Tag: Von 1 bis 31
- Monat: Von 1 bis 12 oder der Name des Monats
- Wochentag: 0 bis 7 oder abgekürzter Name des Tages. Beachten Sie, dass 0 und 7 beide für Sonntag stehen.
Sonderzeichen können in einem der Zeitfelder verwendet werden:
- Asterisk (*): Gibt an, dass der Befehl für jede Instanz des Feldes ausgeführt werden soll
- Bindestrich (-): Kann verwendet werden, um einen Bereich anzugeben. Beispiel: Im Feld für den Wochentag können Sie 1-5 angeben, um die Ausführung der Aufgabe von Montag bis Freitag, jedoch nicht am Samstag oder Sonntag zu planen.
- 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 mit 6 Uhr und 6 Uhr zu planen.
- Schrägstrich (/): Kann zur Angabe von Schrittwerten verwendet werden. Beispiel: Sie können */15 im Minutenfeld angeben, um die Ausführung einer Aufgabe alle 15 Minuten zu planen.
Mit dem crontab können Sie auch eine spezielle Kurzfassung verwenden, um die Zeitfelder für allgemeine Zeitanforderungen zu ersetzen. Wichtig ist, dass diese Kurzschrift auch eine Option zum Ausführen eines Befehls nach dem Neustart enthält:
- @reboot: Einmal nach dem Neustart ausführen.
- @yearly : Einmal jährlich ausgeführt, d.h. "0 0 1 1 *".
- @annually : Einmal jährlich ausgeführt, d.h. "0 0 1 1 *".
- @monthly: Einmal im Monat ausführen, d.h. "0 0 1 * *".
- @weekly: Einmal wöchentlich 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 das crontab nur 1 Minute Granularität bietet. Es ist nicht einfach, einen crontab-Eintrag festzulegen, der häufiger als jede Minute ausgeführt wird. Wenn Sie nach einem Tool suchen, das dieses verarbeiten kann, sollten Sie Systemd Timer-Einheiten betrachten.
Bearbeiten Sie die crontab-Datei, um verschiedene laufende Befehle zu verschiedenen Zeitabfolgen auszuführen
-
Verwenden Sie den Befehl
crontab –e
, um die crontab-Datei im Standardeditor zu öffnen:crontab -e
-
Fügen Sie die folgenden Einträge zur Registerkarte "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 die crontab gehört, und wird mit einigen festgelegten Standardumgebungsvariablen ausgeführt, einschließlich:
- HOME: Das Home-Verzeichnis für den Benutzer, als der crontab ausgeführt wird
- LOGNAME: Entspricht dem Benutzernamen des Benutzers, als der 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. Dies ist standardmäßig auf
/bin/sh
gesetzt. - PATH: Der für das crontab-Utility verfügbare Pfad. Dies ist standardmäßig auf
/usr/bin:/bin
gesetzt.
Sie können alternative Umgebungsvariablen festlegen, indem Sie sie als Zeilen in der Registerkarte angeben, die keine Zeitfelder enthalten. Beispiel: Wenn Sie die Basis-Shell verwenden möchten und regelmäßig alle Variablen und Einstellungen mit Ihrer persönlichen .bashrc
-Konfiguration importieren möchten, können Sie die Registerkarte wie folgt bearbeiten:
SHELL=/bin/bash
* * * * * source $HOME/.bashrc;
Da der Befehl, der für einen crontab-Job ausgeführt wird, in einer Shellumgebung ausgeführt wird, gilt die Standard-Shell-Syntax und kann zur Pipe- oder Umleitung der Ausgabe verwendet werden. Beispiel: Um alle Ausgaben in /dev/null umzuleiten, deaktivieren Sie als Ergebnis eine geschickte Ausgabe für den Job, verwenden Sie Standard-Shell-Umleitungen für die Ausgabe STDOUT und STDERR 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 die crontab-Datei, um mit der Befehlssyntax zu experimentieren
-
Öffnen Sie die crontab-Datei 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 % Zeichen im Date-Befehl 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.
Innerhalb einer Minute sollte eine Datei crontab.log im Verzeichnis $HOME angezeigt werden. Sie können den Inhalt dieser Datei anzeigen, indem Sie Folgendes ausführen:
tail $HOME/crontab.log
Auf crontab-Ausgabe im lokalen Mailspool zugreifen
Wenn ein MTA installiert ist, wird die gesamte crontab-Ausgabe standardmäßig an den Mail-Spool des Benutzers gesendet.
Hinweis: Die folgenden Anweisungen dienen nur zu Zwecken 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 Postfix auf einem System aktivieren, lesen Sie auch Oracle Linux: Postfix Email Server installieren, um Informationen zur ordnungsgemäßen Konfiguration zu erhalten.
Damit die Crontab-Mail-Verarbeitung 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 MTA postfix 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 mit dem Postfix MTA die Postzustellung übernimmt:
sudo systemctl restart crond.service
Wenn Sie die crontab-Datei nicht so konfiguriert haben, dass die Ausgabe an eine alternative E-Mail-Adresse umgeleitet wird oder die Ausgabe für Ihre Cron-Jobs verworfen wird, wird die Ausgabe für jeden Job automatisch an die lokale E-Mail-Spule für den Benutzer gesendet. Der E-Mail-Spool wird normalerweise als Einzel-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 zu verschicken, dass Mail wie geliefert angezeigt wird:
tail -f /var/spool/mail/$USER
Um die Ausgabe jedes Cron-Jobs in einer überschaubaren Schnittstelle zu prüfen, installieren Sie das Package mailx, und zeigen Sie den Inhalt des Mailspools mit dem Befehl mail
an:
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 E-Mail-Nachricht ein, die angezeigt werden soll. Beispiel: Geben Sie 1 ein, um die erste Nachricht in der Queue anzuzeigen:
& 1
Hello World
Verwenden Sie den Befehl header
, um zur Liste der E-Mail-Header zurückzukehren, oder beenden Sie die Anwendung mit dem Befehl quit
.
Sie können die E-Mail-Adresse ändern, mit der die Cron-Ausgabe per E-Mail gesendet wird, indem Sie die MAILTO-Umgebungsvariable in Ihrer crontab-Datei festlegen. Ihr System muss jedoch für die externe E-Mail-Zustellung konfiguriert werden. Wenn Sie die MAILTO-Umgebung auf einen leeren Wert setzen, wird die Ausgabe verworfen, und es werden keine E-Mails für einen Cron-Job in der crontab gesendet.
Entfernen Sie die gesamte crontab
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-Job-Einträ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-Tabelle zu bearbeiten und die Zeile für den Job zu entfernen, den Sie entfernen möchten.
Videodemonstration
Eine Videovorführung finden Sie unter https://www.youtube.com/watch?v=BpPGoRYTv9I, wenn Sie weitere Informationen zur Arbeit mit dem crontab-Utility in Oracle Linux 8 benötigen.
Oracle Linux 8 - Aufgaben-Cron-Dienstprogramm automatisieren
Weitere Informationen
man 5 crontab
man systemd.timer
- Oracle Linux: Postfix-E-Mail-Server installieren
- Oracle Linux-Dokumentation
- Oracle Learning Library
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere Inhalte für kostenloses Lernen im Oracle Learning YouTube-Kanal zu. Außerdem besuchen Sie education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49758-03
May 2022
Copyright © 2021, Oracle and/or its affiliates.