Hinweis:

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

Ziele

In diesem Tutorial werden folgende Themen behandelt:

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

  1. Öffnen Sie die crontab-Datei mit dem Befehl crontab –e im Standardeditor:

    crontab -e
    

    Der Standardeditor in Oracle Linux ist der vim-Editor.

  2. 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
    
  3. 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:

Sonderzeichen können in einem der Zeitfelder verwendet werden:

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:

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

  1. Öffnen Sie die crontab-Datei mit dem Befehl crontab –e im Standardeditor:

    crontab -e
    
  2. 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"
    
  3. 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:

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

  1. Öffnen Sie die crontab in einem Editor mit dem Befehl crontab -e.

  2. 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.

  3. 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:

  1. Installieren Sie das postfix-Package:

    sudo dnf install -y postfix
    
  2. Aktivieren und starten Sie den Postfix-Service. Die Standardkonfiguration aktiviert das Postfix nur als lokale Zustellungs-MTA:

    sudo systemctl enable --now postfix.service
    
  3. 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.