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. In der Übung ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Systemzeit- und Zeitplanaufgaben in Oracle Linux verwalten
Einführung
Oracle Linux bietet Benutzern verschiedene Möglichkeiten, mit Uhrzeit und Datum zu interagieren. Sie können diese manuell ändern. In der Regel wird jedoch ein Service konfiguriert, der das Network Time Protocol (NTP) implementiert, wie chrony. Auf diese Weise bleibt die Systemzeit korrekt, und alle Aufgaben, die cron
oder systemd timers
verwenden, werden planmäßig ausgeführt.
Ziele
In diesem Tutorial lernen Sie:
- Verwalten Sie die Systemzeit vom Terminal aus mit
date
,hwclock
undtimedatectl
- chrony-Service ausführen und aktivieren
- Aufgaben mit cron und systemd timers planen
Voraussetzungen
-
Mindestens ein einziges Oracle Linux-System
-
Auf jedem System muss Oracle Linux installiert und konfiguriert sein mit:
- Ein Nicht-Root-Benutzerkonto mit Sudo-Zugriff
- Zugriff auf das Internet
Oracle Linux bereitstellen
Hinweis: Wenn Sie in Ihrem eigenen Mandanten ausgeführt werden, lesen Sie das Projekt linux-virt-labs
GitHub README.md, und schließen Sie die Voraussetzungen ab, bevor Sie die Übungsumgebung bereitstellen.
-
Öffnen Sie ein Terminal auf dem Luna Desktop.
-
Klonen Sie das Projekt
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Wechseln Sie in das Arbeitsverzeichnis.
cd linux-virt-labs/ol
-
Installieren Sie die erforderlichen Sammlungen.
ansible-galaxy collection install -r requirements.yml
-
Bereitstellen der Übungsumgebung.
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6"
Die kostenlose Übungsumgebung erfordert die zusätzliche Variable
local_python_interpreter
, dieansible_python_interpreter
für Wiedergaben festlegt, die auf localhost ausgeführt werden. Diese Variable ist erforderlich, da die Umgebung das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python unter den python3.6-Modulen installiert.Die Standard-Deployment-Ausprägung verwendet AMD-CPU und Oracle Linux 8. Um eine Intel CPU oder Oracle Linux 9 zu verwenden, fügen Sie dem Deployment-Befehl
-e instance_shape="VM.Standard3.Flex"
oder-e os_version="9"
hinzu.Wichtig: Warten Sie, bis das Playbook erfolgreich ausgeführt wird, und erreichen Sie die Unterbrechungsaufgabe. In dieser Phase des Playbooks ist die Installation von Oracle Linux abgeschlossen, und die Instanzen sind bereit. Notieren Sie sich die vorherige Wiedergabe, in der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten und alle anderen Deployment-Informationen gedruckt werden, die während der Ausführung der Übung erforderlich sind.
Systemdatum und -zeit konfigurieren
Oracle Linux verfügt über drei allgemeine Befehle, mit denen Sie Datum und Uhrzeit auf Ihrem System anpassen können. Der Befehl date
passt die Systemzeit an, während hwclock
die RTC-Zeit anpasst. In Oracle Linux bezieht sich die RTC-Zeit auf die Zeit, die von der Real-Time Clock (RTC) aufbewahrt wird, einer batteriegestützten Hardwareuhr, die weiter ausgeführt wird, wenn das System ausgeschaltet ist. Andere gebräuchliche Namen für die Hardwareuhr sind die CMOS-Uhr oder die BIOS-Uhr. Wenn Sie die RTC-Uhr nach einer date
-Änderung aktualisieren möchten, müssen Sie hwclock
ausführen.
Die dritte Option ist timedatectl
. Dieser Befehl kombiniert date
und hwclock
und aktualisiert sowohl das System als auch die RTC beim Festlegen der Uhrzeit. Bei modernen systemdbasierten Linux-Distributionen wie Oracle Linux wird empfohlen, timedatectl
zu verwenden.
Systemuhr anzeigen und einstellen
-
Öffnen Sie ein Terminal, und verbinden Sie sich über SSH mit der Instanz ol-node-01.
ssh oracle@<ip_address_of_instance>
-
Aktuelle Systemzeit und -datum abrufen.
date
Die Ausgabe zeigt Datum, Uhrzeit und Zeitzone des Systems im Standardformat an. Sie können das Format der Ausgabe mit den vielen Argumenten des Befehls
date
ändern. Diese Argumente helfen beim Skripten oder Berechnen verschiedener Datums- und Uhrzeitangaben. Weitere Informationen finden Sie, indem Siedate --help
ausführen oder die manuelle Seite mitman date
anzeigen. -
Systemzeit und -datum anpassen
sudo date -s "1 JAN 1970 16:00:00"
-
Vereinfachen Sie das Format mit den Formatkontrollargumenten.
sudo date +%Y%m%d -s "20250203"
Da Sie keine Uhrzeit angegeben haben, wird der Zeitabschnitt standardmäßig auf Nullen gesetzt, d.h. auf Mitternacht.
-
Legen Sie die Systemzeit fest.
sudo date +%T -s "14:08:14"
Wenn Sie den Befehl
date
erneut ausführen, sollte die Zeit entsprechend Ihrer Eingabe angezeigt werden.
Hardwareuhr anzeigen und einstellen
-
Lesen Sie die aktuelle Hardware-Uhr (RTC).
sudo hwclock --show
-
Legen Sie die Systemuhr basierend auf der Hardwareuhr fest.
sudo hwclock -s
Mit dem Befehl können Sie die Uhren in die entgegengesetzte Richtung setzen, indem Sie die Funktion
-w
übergeben. Sehen Sie sich zusätzliche Funktionen und Optionen an, indem Siehwclock --help
ausführen oder die manuelle Seiteman hwclock
anzeigen.
Datum und Uhrzeit mit Systemd
-
Aktuelles Datum und aktuelle Zeit abrufen.
timedatectl
Die Ausgabe in der kostenlosen Übungsumgebung zeigt, dass der NTP-Service aktiv ist. Um die Datums- und Uhrzeiteinstellungen manuell mit
timedatectl
anzupassen, muss dies zuerst deaktiviert werden. -
Deaktivieren Sie die NTP-Synchronisierung.
sudo timedatectl set-ntp no
-
Legen Sie Datum und Zeit fest.
sudo timedatectl set-time '2014-09-23 14:10:40'
-
Prüfen Sie Datum und Uhrzeit.
date
-
Eine Liste der Zeitzonen abrufen.
timedatectl list-timezones
Drücken Sie
q
, um dentimedatectl
-Befehl zu beenden. -
die Zeitzone festlegen.
sudo timedatectl set-timezone 'America/Chicago'
-
Prüfen Sie die neue Zeitzone.
timedatectl
-
Geben Sie die Zeitzone an Coordinated Universal Time (UTC) zurück.
sudo timedatectl set-timezone 'UTC'
-
Aktivieren Sie die NTP-Synchronisierung.
sudo timedatectl set-ntp yes
Nach einiger Zeit erfolgt die Synchronisierung, und die Uhr wird basierend auf der festgelegten Zeitzone zum aktuellen Tag und zur aktuellen Uhrzeit zurückkehren.
Chrony verwenden
chrony ist ein Feature von Oracle Linux, das NTP implementiert, um die Zeiterfassung im Netzwerk genau aufrechtzuerhalten. Es besteht aus zwei Komponenten, chronyd
und chronyc
. chronyd
ist ein Service-Daemon, der beim Booten aktiviert und gestartet werden kann, während chronyc
ein Befehlszeilenutility ist, mit dem die Performance von chronyd
überwacht und die Laufzeitparameter geändert werden.
-
Prüfen Sie, ob chrony installiert ist.
dnf list chrony
Sie können es mit
sudo dnf install -y chrony
installieren, wenn Sie feststellen, dass es nicht installiert ist. -
Prüfen Sie den Status des Service-Daemons.
sudo systemctl status chronyd
Aktivieren und starten Sie den Service mit
sudo systemctl enable --now chronyd
, wenn er inaktiv ist. Drücken Sieq
, um densystemctl
-Befehl zu beenden. -
Informationen zur Leistung der Systemuhr abrufen.
chronyc -n tracking
Beispielausgabe:
Reference ID : A9FEA9FE (169.254.169.254) Stratum : 3 Ref time (UTC) : Mon Feb 03 16:07:59 2025 System time : 0.000009410 seconds slow of NTP time Last offset : -0.000011537 seconds RMS offset : 0.000015202 seconds Frequency : 22.818 ppm slow Residual freq : -0.004 ppm Skew : 0.222 ppm Root delay : 0.000643811 seconds Root dispersion : 0.000107666 seconds Update interval : 64.4 seconds Leap status : Normal
Dabei gilt:
- Referenz-ID: Dies ist die Referenz-ID und der Name oder die IP-Adresse des Servers, mit dem der Computer derzeit synchronisiert ist. Die Referenz-ID in der Ausgabe wird als Hexadezimalzahl angezeigt.
- Stratum: Das Stratum gibt an, wie viele Hopfen von einem Computer mit angeschlossener Referenzuhr entfernt sind.
- Ref-Zeit: Dies ist die Zeit in UTC, zu der das System die letzte Messung aus der Referenzquelle verarbeitet hat.
Weitere Informationen finden Sie in der Anleitung unter
man chronyc
. -
Rufen Sie eine Liste der Quellen ab, die Ihr System verwendet.
chronyc -n sources
Mit der Option
-v
werden Spaltenbeschreibungen für jede der angezeigten Spalten angezeigt.
Aufgaben planen
Oracle Linux bietet verschiedene Möglichkeiten, Aufgaben zu planen. Diese Aufgaben oder Jobs können auf System- oder Benutzerebene ausgeführt werden. Während cron wahrscheinlich die bekannteste dieser Methoden ist, führte systemd die flexibleren Timer in Bezug auf die Planung mit dem Kalender und der monotonen Zeit ein und wird immer häufiger verwendet. Aktuelle Oracle Linux-Distributionen haben eine Kombination aus beidem.
Cron verwenden
-
Auf Cron-Jobs auf Systemebene prüfen.
sudo ls -al /etc/cron*
Die Ausgabe enthält mehrere Verzeichnisse mit ausführbaren Skripten, die ausgewählte Aufgaben nach einem vordefinierten Zeitplan ausführen, z.B. stündlich, wöchentlich und monatlich. Das Verzeichnis
/etc/cron.d
ist ebenfalls vorhanden, in dem Packages crontab-Snippets platzieren können, ohne das System/etc/crontab
zu ändern. -
Rufen Sie eine Liste der Cron-Jobs auf Systemebene ab.
sudo crontab -l
Die Ausgabe gibt an, dass keine crontab-Datei für root vorhanden ist. Wenn Sie denselben Befehl ohne
sudo
ausführen, wird dieselbe Ausgabe angezeigt, jedoch für das lokale Benutzerkonto. -
Cron-Job auf Benutzerebene erstellen
(crontab -l 2>/dev/null; echo '* * * * * date >> /home/oracle/test') | crontab -
Der erste Befehl vermeidet die Meldung no crontab, da dies der erste eingegebene Job ist, und der zweite Job erstellt den Job, der jede Minute ausgeführt wird.
-
Überprüfen Sie, ob crontab jetzt vorhanden ist.
crontab -l
Jeder Job wird in seiner eigenen Zeile im crontab angezeigt. Die crontab-Datei enthält fünf durch Leerzeichen getrennte Felder, in denen die verschiedenen Zeiträume definiert werden, die Sie konfigurieren können, gefolgt von dem Befehl, den der Job ausführen wird. Der Befehl kann jedem Befehl entsprechen, den Sie in der Befehlszeile des Systems ausführen können. So können Sie Ihre Skripte ausführen oder Pipes und Umleitungsoperatoren nutzen. Wenn Sie den Job bearbeiten möchten, verwenden Sie den Befehl
crontab -e
, mit dem Sie in den Standard-EDITORvi
unter Oracle Linux gelöscht werden.Optionen für Crontab-Zeitfolge
Crontab definiert Zeitfelder wie folgt:
- 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. 0 und 7 repräsentieren den Sonntag.
Sie können Sonderzeichen in einem der Zeitfelder verwenden:
- 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 "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 verwendet werden, um eine Werteliste für ein Feld anzugeben. 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 (/): Damit können Sie Schrittwerte angeben. Beispiel: Sie können im Feld "Minuten" */15 angeben, um die Ausführung einer Aufgabe alle 15 Minuten zu planen.
Mit dem crontab können Sie auch eine eindeutige Kurzzeiterweiterung verwenden, um die Zeitfelder für allgemeine Zeitanforderungen zu ersetzen. Wichtig ist, dass diese Kurzform auch eine Option zum Ausführen eines Befehls nach dem Neustart enthält:
- @reboot: Einmal nach dem Neustart ausführen.
- @yearly : Einmal im Jahr ausführen, d.h. "0 0 1 1 *".
- @annually : Einmal im Jahr ausführen, d.h. "0 0 1 1 *".
- @monthly : Einmal im Monat ausführen, 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 * * * *".
Der Crontab bietet nur eine Granularität von 1 Minute. Wenn Sie eine feinere granulare Steuerung Ihrer Aufgabe benötigen, wird empfohlen, systemd Timer zu verwenden.
Beispiele:
*/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"
-
Überprüfen Sie die Cron-Ausgabe.
sudo tail /var/log/cron
In der Ausgabe werden Datum, Uhrzeit, Benutzer und Befehl angezeigt. Da eine minimale Standardinstallation von Oracle Linux den Mail Transport Agent (MTA) nicht installiert, leitet der cron-Daemon die Ausgabe von Befehlen, die in der crontab-Datei angegeben sind, an den Syslog-Daemon weiter. Daher können Sie die crontab-Ausgabe in der Logdatei unter
/var/log/cron
anzeigen.Crontab-Befehlssyntax
Die crontab-Datei wird unter den Zugangsdaten des Benutzers ausgeführt, zu dem die crontab-Datei gehört, und wird mit einigen festgelegten Standardumgebungsvariablen ausgeführt, darunter:
- 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
- BENUTZER: Der Benutzername des Benutzers, als der crontab ausgeführt wird
- SHELL: Die SHELL-Binärdatei, mit der das System Befehle ausführt. Dieser Wert ist standardmäßig auf
/bin/sh
gesetzt. - PATH: Der Pfad, der für das crontab-Utility verfügbar ist. Dieser Wert ist standardmäßig auf
/usr/bin:/bin
gesetzt.
Sie können alternative Umgebungsvariablen festlegen, indem Sie sie als Zeilen innerhalb der crontab-Datei angeben, die keine Zeitfelder enthalten. Beispiel: Wenn Sie die bash-Shell verwenden möchten und regelmäßig alle Variablen und Einstellungen in Ihrer persönlichen
.bashrc
-Konfiguration importieren möchten, können Sie das Crontab mitcrontab -e
wie folgt bearbeiten:SHELL=/bin/bash * * * * * source $HOME/.bashrc;
Da der Befehl crontab-Jobs in einer Shell-Umgebung ausgeführt wird, gilt die Standard-Shell-Syntax und kann zum Überleiten oder Umleiten der Ausgabe verwendet werden. Beispiel: Um alle Ausgaben in /dev/null umzuleiten, verwenden Sie Standard-Shell-Umleitungen 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 Ausgabe bei jeder Ausführung des Befehls verfolgen können:
* * * * * /path/to/command >> $HOME/command.log
Beispiele:
*/15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but the 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
Im Beispiel werden die
%
-Zeichen im date-Befehl maskiert, 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 unterman 5 crontab
.
Crontab-Datei entfernen
Wenn Sie nur einen bestimmten Job entfernen möchten, können Sie die einzelne Zeile, die diesen Job enthält, mit dem Befehl crontab -e
bearbeiten und entfernen. Wenn Sie jedoch alle Jobs entfernen möchten, bietet crontab
eine schnelle und effiziente Option.
-
Entfernen Sie alle Ihre Cron-Jobs.
crontab -r
Systemtimer
Wie Cron-Jobs ermöglichen Systemd-Timer das Ausführen von Befehlen oder Skripten zu einem bestimmten Zeitpunkt. Diese Aufgaben werden jedoch von systemd gesteuert und überwacht und haben eine feinere Kontrolle über die zeitbasierte Aktivierung.
-
Vorhandene Timer auflisten.
systemctl status *timer
Drücken Sie
q
, um densystemctl
-Befehl zu beenden.
Timer erstellen
Ein Timer besteht aus einer Serviceeinheit, die die zu erledigende Arbeit definiert, und einer Timereinheit, um sie zu planen und auszulösen. Da es sich um systemgesteuerte Serviceeinheiten handelt, können Sie diese im System oder im Benutzerbereich erstellen. Der Vorteil des Benutzerbereichs besteht darin, dass Benutzer ihre Services wie Daemons und automatisierte Aufgaben verwalten können.
-
Erstellen Sie das systemd-Verzeichnis des lokalen Benutzers.
mkdir -p ~/.config/systemd/user
Serviceeinheiten und Timer auf Systemebene gehen in
/etc/systemd/system
. -
Aktivieren Sie Lingering für den aktuellen Benutzer.
loginctl enable-linger $(whoami)
Lingering bezieht sich auf eine Funktion in systemd, mit der Benutzerprozesse auch dann weiter ausgeführt werden können, wenn sich der Benutzer von seiner Sitzung abmeldet.
-
Überprüfen Sie den Aufenthaltsstatus des Benutzers.
loginctl user-status $(whoami)
Drücken Sie
q
, um den loginctl-Befehl zu beenden. -
Schreiben Sie ein Skript, damit der Timer ausgeführt wird.
cat << 'EOF' | tee ~/test.sh > /dev/null #!/bin/bash /usr/bin/echo "test from test.service: $(date)" 2>&1 | tee -a /home/oracle/test.log EOF
-
Machen Sie das Skript ausführbar.
chmod +x ~/test.sh
-
Erstellen Sie eine Serviceeinheit.
cat << EOF | tee ~/.config/systemd/user/test.service > /dev/null [Unit] Description=Run the test script StartLimitIntervalSec=1 StartLimitBurst=10 [Service] Type=oneshot ExecStart=/home/oracle/test.sh StandardOutput=journal SyslogIdentifier=test EOF
Der Service erfordert
StartLimitIntervalSec
undStartLimitBurst
, da er diesen Service alle paar Sekunden ausführen soll. Weitere Informationen zu diesen Parametern finden Sie unterman systemd.unit
. -
Erstellen Sie eine Timer-Einheit.
cat << EOF | tee ~/.config/systemd/user/test.timer > /dev/null [Unit] Description=Run test.service every 10 seconds [Timer] OnCalendar=*:*:0/10 AccuracySec=1 Persistent=true [Install] WantedBy=timers.target EOF
Der Parameter
AccuracySec
ist erforderlich, da systemd Timer nicht genau ausgeführt werden, wenn sie angefordert werden, sondern mit einer Standardabweichung von einer Minute arbeiten. -
Informieren Sie systemd über die Änderungen.
systemctl --user daemon-reload
-
Aktivieren und starten Sie den Timer.
systemctl --user enable --now test.timer
-
Prüfen Sie, ob der Timer ausgeführt wird.
systemctl --user status test.timer --no-pager
Mit der Option
--no-pager
wird die vollständige Ausgabe gedruckt, ohne dass Sie durch die Einträge scrollen oder blättern müssen. Weitere Optionen finden Sie untersystemctl --help
. -
Prüfen Sie die Logdatei des bash-Skripts.
cat ~/test.log
-
Prüfen Sie das systemd-Journal.
journalctl -r -n 10 --user-unit test --no-pager
Diese Ausgabe zeigt die letzten 10 Zeilen der Ausgabe der systemd unit des Benutzers test.service an. Mit der Option
-r
werden die Buchungen in umgekehrter chronologischer Reihenfolge angezeigt.journalctl -r -n 10 -t test --no-pager
Dieser Befehl zeigt die Ausgabe an, die vom Skript generiert wird, das von der systemd-Serviceeinheit ausgeführt wird. Die Option
-t
entspricht der in der Dateitest.service
definiertenSyslogIdentifier
, die eine ID für die Suche bereitstellt. Weitere Optionen fürjournalctl
finden Sie auf der Seiteman journalctl
. -
Timer deaktivieren
systemctl --user disable test.timer
Dieser Befehl verhindert, dass der Timer in Zukunft automatisch gestartet wird, und macht ihn inaktiv.
-
Stoppen Sie den Timer.
systemctl --user stop test.timer
Dieser Befehl stoppt die aktuelle Ausführung des Timers, wenn er ausgeführt wird. Es verhindert nicht, dass der Timer in Zukunft wieder startet.
Nächste Schritte
Nach Abschluss dieses Tutorials haben Sie Ihre Fähigkeiten und Fähigkeiten zur Verwaltung von Datum, Uhrzeit und Zeitplanaufgaben für Oracle Linux demonstriert. Es gibt viele weitere Flags und Funktionen der angezeigten Befehle. Sehen Sie sich die Links unten und die vorgeschlagenen Manpages an, um Ihr Wissen und Ihre Fähigkeiten zu erweitern.
Verwandte Links
Weitere Lernressourcen
Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Manage System Time and Schedule Tasks on Oracle Linux
F49758-05