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.
Systemd auf Oracle Linux verwenden
Einführung
In diesem Tutorial erfahren Sie, wie Sie mit dem Befehlszeilenutility systemctl systemd-Einheiten verwalten und anzeigen können, die von systemd gesteuert werden. Dieses Tutorial richtet sich an Benutzer von Oracle Linux 8 oder höher.
systemd ist der erste Prozess, der beim Booten beginnt und der letzte Prozess ist, der beim Herunterfahren des Systems beendet wird. systemd wird hauptsächlich zur Verwaltung von Systemdiensten oder -prozessen und zur Systeminitialisierung beim Booten verwendet. Systemd ist jedoch auch in der Lage, viele andere Aufgaben und Funktionen zu verarbeiten, einschließlich Ereignisprotokollierung, Geräteverwaltung, Benutzeranmeldung, Aufgabenplanung, Zeitsynchronisierung und Systemstart. Viele Funktionen in systemd werden nicht voll ausgelastet, da Benutzer bei alternativen Software für diese Zwecke möglicherweise komfortabler sind oder verschiedene Linux-Distributionen bevorzugte Ansätze für die Systemkonfiguration aufweisen können.
Verschiedene Verhaltensweisen oder Funktionen innerhalb von systemd werden in systemd Einheiten behandelt. Beispiel: Daemon-Prozesse oder Systemservices werden als Serviceeinheiten ausgeführt, während Systemstatus in der Regel als Zieleinheiten definiert sind. Timer-Einheiten können so definiert werden, dass Aufgaben wie der System-Cron-Service geplant werden. Mithilfe einer Einhängeeinheit kann ein Einhängepunkt ähnlich konfiguriert werden wie ein Einhängepunkt in der System-fstab.
systemd dient zur Verwaltung von Prozessen und Funktionen auf Systemebene, ist aber auch in der Lage, Prozesse zu verwalten, die im Userspace ausgeführt werden. Benutzer auf einem System können ihre eigenen Services konfigurieren und verwalten. Systemd kann sogar so konfiguriert werden, dass diese Services weiter ausgeführt werden können, nachdem der Benutzer seine Session beendet hat.
Ziele
- Verschiedene Systemeinheitstypen ermitteln
- Systemd Zieleinheiten verwenden
- Gängige systemctl-Befehlssyntax kennenlernen
- Eigene System-Timer-Einheit im Benutzerbereich erstellen
- Systemd konfigurieren, damit die Prozesse im Userspace nach der Abmeldung ausgeführt werden können
Voraussetzungen
- Ein System mit installiertem Oracle Linux 8.
Hinweis: Bei der Verwendung der kostenlosen Übungsumgebung finden Sie unter Oracle Linux Lab Basics für Verbindungen und weitere Verwendungsanweisungen.
Systemd Unit-Dateien untersuchen
Nachdem Sie eine Verbindung zur Oracle Linux 8-Instanz hergestellt haben, können Sie mit dem Befehl systemctl experimentieren und sich mit den verschiedenen verfügbaren Einheiten vertraut machen.
-
Führen Sie den Befehl systemctl aus, um alle vom System geladenen systemd Einheiten aufzulisten:
systemctl
Verwenden Sie die Leertaste oder die PgDn-Taste auf Ihrer Tastatur, um durch die Ausgabe zu blättern.
Dieser Befehl entspricht der Ausführung von:
systemctl list-units
In der Ausgabe werden alle derzeit aktiven Konfigurationseinheiten angezeigt, die vom System verwaltet werden. In der Ausgabe sollten Sie feststellen, dass es Einheiten mit unterschiedlichen Suffixen gibt, einschließlich Einheiten mit den Suffixen ".device", ".mount", "service", ".target" und ".timer".
Einheiten sind so aktiv, dass sie je nach Zweck gestartet, ausgeführt, eingehängt oder angeschlossen werden. Einheiten können in dem Sinne inaktiv sein, dass sie gestoppt, ausgehängt oder getrennt werden. Wenn Sie alle Einheiten anzeigen möchten, unabhängig davon, ob sie aktiv sind oder nicht, können Sie Folgendes ausführen:
systemctl list-units --all
Die Ausgabe dieser Befehle zeigt eine Auswahl der verschiedenen Typen von systemd Einheiten:
automount
: Stellt Automatisierungsfunktionen für das On-Demand-Mounten von Dateisystemen und paralleles Hochfahren bereit.mount
: Steuert Mount Points in der aktuellen Datums- und Uhrzeitanzeige des Dateisystems.path
: Services können aktiviert werden, wenn sich die Pfadinformationen des Dateisystems ändern.scope
: Ähnlich wie Serviceeinheiten, verwaltet jedoch Fremdprozesse, anstatt sie zu starten.service
: Startet und steuert Daemons und die Prozesse, aus denen sie bestehen.slice
: Dient zur Gruppierung von Einheiten, die Systemprozesse verwalten, wie Serviceeinheiten und Umfangeinheiten, im hierarchischen Gruppenbaum für Ressourcenmanagementzwecke.socket
: Kapselt die lokale Interprozesskommunikation (IPC) oder Netzwerk-Sockets im System ein, die für die Socket-basierte Aktivierung nützlich sind.target
: Wird verwendet, um Einheiten zu gruppieren oder bekannte Synchronisierungspunkte beim Booten bereitzustellen.timer
: Wird verwendet, um die Aktivierung anderer Einheiten mit Timern auszulösen. Diese bieten eine Alternative zu Aufgaben, die möglicherweise zuvor mit dem Cron-Service verwaltet wurden.device
: Gibt Kernel-Geräte in systemd an und kann auch zur Implementierung einer gerätebasierten Aktivierung verwendet werden.swap
: Blendet Speicher-Swap-Partitionen oder -Swapdateien ein.
-
Beschränken Sie die Einheitenliste mit der Option
--type
auf einen bestimmten Einheitentyp.-
Verwenden Sie den Befehl
systemctl list-units --type services
, um die derzeit aktiven Serviceeinheiten auf Ihrem System aufzulisten.systemctl list-units --type service
-
Führen Sie denselben Befehl erneut aus, nehmen Sie jedoch die Option
--all
auf, um alle geladenen Einheiten einschließlich der inaktiven Einheiten (sofern vorhanden) anzuzeigen.systemctl list-units --type service --all
-
Sie können diese Befehle für jeden verfügbaren Servicetyp wiederholen, damit Sie Informationen nur auf den Typ beschränken können, mit dem Sie jederzeit arbeiten möchten.
Mit systemd Zieleinheiten arbeiten
Mithilfe von Zieleinheiten werden verschiedene Einheiten gruppiert, um das System in einen bestimmten Zustand zu versetzen, sodass es für einen bestimmten Zweck funktionsfähig ist.
-
Listen Sie die verfügbaren
target
-Einheiten auf.systemctl list-units --type target
Einheiten können verlangen, dass andere Einheiten geladen werden oder für einen Konflikt mit bestimmten Einheiten konfiguriert werden. Beispiel: Für
multi-user.target
mussbasic.target
funktionieren, und es ist auch ein Konflikt mit den Einheitenrescue.service
undrescue.target
aufgetreten. Einheiten geben auch andere Einheiten an, die geladen werden sollen, um funktionieren zu können.Auf diese Weise können Ziele verkettet werden, um einen bestimmten Zustand einzurichten, sind aber auch modular genug, um wiederverwendet werden zu können, um einen alternativen Zustand auszulösen.
-
Standard-Zieleinheit anzeigen.
Die Standard-Zieleinheit definiert den Standard-Systemstatus nach dem Booten.
-
Verwenden Sie den Befehl
systemctl get-default
, um anzuzeigen, welche Zieleinheit standardmäßig verwendet wird. Die Standardzieleinheit wird durch die Datei/etc/systemd/system/default.target
dargestellt.systemctl get-default
-
Verwenden Sie den Befehl
ls -l
, um Informationen zur Datei/etc/systemd/system/default.target
aufzulisten.ls -l /etc/systemd/system/default.target
Hinweis: Die Datei
default.target
ist ein symbolischer Link zur aktuellen Standardzieleinheitendatei.
-
-
Ändern Sie die Standard-Zieleinheit.
-
Verwenden Sie den Befehl
systemctl set-default
, um die Standardzieleinheit in die Einheitgraphical.target
zu ändern.systemctl set-default graphical.target
-
Verwenden Sie den Befehl
ls –l
, um zu bestätigen, dass die Dateidefault.target
jetzt ein symbolischer Link auf die Dateigraphical.target
ist.ls -l /etc/systemd/system/default.target
Hinweis: Wenn Sie die Standard-Zieleinheit ändern, wird der vorhandene symbolische Link
default.target
entfernt, und der symbolische Link wird neu erstellt, der auf die neue Standard-Zieleinheit verweist.
-
-
Erkunden Sie ein Ziel für weitere Informationen.
-
Verwenden Sie den Befehl
systemctl show
, um weitere Informationen zu einem bestimmten Ziel abzurufen.systemctl show multi-user.target
In der Ausgabe werden alle Parameter für das angegebene Ziel angezeigt. Beachten Sie, dass Sie die Einheiten identifizieren können, die für das Ziel erforderlich sind, wollen und in Konflikt stehen, und dass Sie auch sehen können, welche Einheiten dieses Ziel vor und nach ausgeführt werden muss.
-
Verwenden Sie den Befehl
systemctl list-dependencies
, um die Baumstruktur der Abhängigkeiten anzuzeigen, die für ein bestimmtes Ziel erforderlich sind oder den Status erreichen sollen:systemctl list-dependencies default.target
Mit diesem Befehl werden alle Einheiten angezeigt, die beim Starten des Standardziels gestartet werden. Die Einheitenkette wird rekursiv in einem Baum dargestellt, der es ermöglicht, vollständig zu bewerten, was das Ziel beim Start erreicht. Wenn Sie
graphical.target
als Standardziel festgelegt haben, können Sie sehen, dass das Systemdisplay-manager.service
ausführen möchte, um die grafische Anzeige zu laden. Außerdem wirdmulti-user.target
ausgeführt, um alle erforderlichen Aktionen auszuführen, bevor die grafische Anzeige ausgeführt wird.
-
Einheiten mit systemctl aktivieren, deaktivieren und maskieren
Einheiten können deaktiviert oder aktiviert werden und können auch maskiert werden, damit sie unter keinen Umständen ausgeführt werden. Einige Einheiten sind statisch, da sie immer verfügbar sind. Dies liegt in der Regel daran, dass sie von anderen Einheiten abhängig sind. Mit dem Befehl systemctl list-units
können nur Einheiten angezeigt werden, die im System aktiv oder inaktiv sind.
-
Listen Sie alle im System verfügbaren Einheiten zusammen mit ihrem Status auf:
systemctl list-unit-files
Viele der verfügbaren Einheiten sind statisch. Aktivierte Einheiten werden beim Systemstart gestartet. Deaktivierte Einheiten sind Einheiten, die auf dem System verfügbar sind, aber nicht für den Start beim Booten konfiguriert sind. Maskierte Einheiten sind auf dem System verfügbar, wurden jedoch aktiv auf einen Status gesetzt, in dem sie nicht gestartet werden können.
-
Verwenden Sie den Befehl
systemctl status
, um detaillierte Informationen zur Einheitnfs-server.service
anzuzeigen.systemctl status nfs-server.service
Mit dem Befehl
systemctl
können Sie die Erweiterung.service
löschen, wenn Sie auf Serviceeinheiten verweisen.Der Statusbefehl gibt an, ob eine Einheit aktiviert, aktiv, inaktiv, deaktiviert oder maskiert ist.
Für skriptgesteuerte Lösungen stellt
systemctl
kurze Befehle zur Ausgabe des Status in einer einzigen Zeile bereit:-
Verwenden Sie den Befehl
systemctl is-active
, um zu prüfen, ob dernfs-server
-Service ausgeführt wird (aktiv) oder nicht ausgeführt wird (inaktiv).systemctl is-active nfs-server
-
Verwenden Sie den Befehl
systemctl is-enabled
, um zu prüfen, ob dernfs-server
-Service aktiviert oder deaktiviert ist. Wenn der Service aktiviert ist, startet der Service bei einem Systemneustart.systemctl is-enabled nfs-server
-
-
Aktivieren Sie den Start eines Service beim Booten.
Verwenden Sie den Befehl
systemctl enable
, um dennfs-server
-Service zu aktivieren.sudo systemctl enable --now nfs-server
Sie müssen den Befehl
systemctl
mit Administratorberechtigungen ausführen, wenn der Befehl den Systemstatus oder die Konfiguration ändert. Mit der Option--now
können Sie den Service zusätzlich gleichzeitig starten, wenn Sie ihn aktivieren.Hinweis: Mit dem Befehl wird der Service aktiviert, indem ein symbolischer Link für das Systemstatusziel der niedrigsten Ebene erstellt wird, bei dem der Service gestartet wird. In der Ausgabe hat der Befehl den symbolischen Link
nfs-server.service
für dasmulti-user
-Ziel erstellt.Verwenden Sie
systemctl status command
, um zu bestätigen, dass dernfs-server
-Service jetzt aktiviert ist und ausgeführt wird.systemctl status nfs-server
-
Services deaktivieren und stoppen
Verwenden Sie den Befehl
systemctl disable
, um dennfs-server
-Service zu deaktivieren. Beachten Sie auch, dass der Befehlsystemctl disable
den systemctl-Link für den Service löscht.sudo systemctl disable nfs-server
Verwenden Sie den Befehl
systemctl stop
, um dennfs-server
-Service zu stoppen.sudo systemctl stop nfs-server
Sie können diese Schritte mit der Option
--now
kombinieren, wenn Sie den Service deaktivieren. -
Maskieren Sie eine Einheit, und heben Sie die Maskierung auf.
In einigen Fällen können Sie das Starten von Einheiten deaktivieren. In der Regel können Sie dies tun, wenn eine bestimmte Einheit mit anderen Funktionen auf dem System oder aus einem Policy-Grund in Konflikt steht.
Verwenden Sie den Befehl
systemctl mask
, um dennfs-server
-Service zu maskieren:sudo systemctl mask nfs-server
Ein symbolischer Link wird erstellt, um sicherzustellen, dass die Konfiguration der systemd Einheit auf /dev/null verweist. Dadurch wird verhindert, dass der Service aktiviert oder gestartet wird.
Stellen Sie sicher, dass Sie die nfs-server-Einheit nicht starten können, während sie maskiert ist:
sudo systemctl start nfs-server
Der Service kann nicht gestartet werden, und es wird ein Fehler zurückgegeben, der angibt, dass der Service maskiert ist.
Heben Sie die Maskierung der Einheit auf, um sie in ihren ursprünglichen Zustand zurückzusetzen und Benutzern das Starten oder Aktivieren des Service zu ermöglichen.
sudo systemctl unmask nfs-server
Systemd für Benutzerbereicheinheiten einrichten
Im Allgemeinen wird systemd zur Verwaltung von Einheiten auf Systemebene verwendet. Benutzer benötigen Zugriff auf Administratorebene auf das System, um auf diese Weise konfigurierte systemdefinierte Einheiten zu verwalten. In einigen Umgebungen und für einige Einheitstypen möchten Benutzer möglicherweise die Möglichkeit systemd nutzen, Einheiten innerhalb des Benutzerspeichers auszuführen. Benutzer können beispielsweise Aufgaben mit den Funktionen der Systemtimereinheit planen oder bestimmte Anwendungen oder Services als Serviceeinheiten ausführen, für die keine Berechtigung auf Root-Ebene erforderlich ist.
systemd startet einen systemd-user-Prozess für einen Benutzer bei der Anmeldung. Einheiten in den folgenden Verzeichnissen werden für den Benutzer in der folgenden Reihenfolge verarbeitet:
/usr/lib/systemd/user/
: Von installierten Packages bereitgestellte Speicherplatzeinheiten$HOME/.local/share/systemd/user/
: Speicherplatzeinheiten des Benutzers aus Packages, die im Home-Verzeichnis installiert sind/etc/systemd/user/
: Globale systemweite Benutzereinheiten, die im Benutzerspeicher für alle Benutzer ausgeführt werden sollen$HOME/.config/systemd/user/
: Vom Benutzer erstellte Einheiten
Sie können systemd angeben, dass Sie im Userspace arbeiten, indem Sie für jeden systemd-Befehl die Option --user
verwenden.
-
Listen Sie die derzeit verfügbaren Einheitendateien für Ihren Benutzer auf.
systemctl --user list-unit-files
Beachten Sie, dass die Liste der verfügbaren Einheiten wesentlich kürzer ist als die Ausgabe desselben Befehls ohne die Option
--user
.Die meisten dieser Unit-Dateien auf einem neuen System befinden sich in
/usr/lib/systemd/user
. Listen Sie die Dateien in diesem Verzeichnis auf, um die hier angegebenen Einheiten anzuzeigen:ls -la /usr/lib/systemd/user/
-
Erstellen Sie ein Verzeichnis, in dem Ihre eigenen Systemdateien gehostet werden.
mkdir -p $HOME/.config/systemd/user
-
Erstellen Sie eine eigene systemdiente Serviceeinheit.
cat << EOF > $HOME/.config/systemd/user/uptime.service [Unit] Description="Logs system uptime and load average" Wants=uptime.timer [Service] ExecStart=/usr/bin/uptime [Install] WantedBy=default.target EOF
Diese Wartungseinheit umfasst drei Konfigurationsabschnitte.
Der Abschnitt
Unit
enthält eine Beschreibung für die Einheit und alle Anforderungen. In diesem Fall definiert einWants
-Eintrag eine schwache Anforderung für eine noch nicht vorhandene Timereinheit. Einheiten, die alsWants
-Einträge aufgeführt werden, werden ausgeführt, wenn sie verfügbar sind, verhindern jedoch nicht, dass die übergeordnete Einheit ausgeführt wird, wenn sie nicht gefunden wird oder nicht ausgeführt werden kann.Der Abschnitt
Service
definiert das Verhalten dieser spezifischen Serviceeinheit, wenn sie ausgeführt wird. Wir vertrauen hier auf viele Standardwerte für die verfügbaren Optionen und geben nur dieExecStart
-Zeile an, die den Befehl angibt, der beim Starten des Service ausgeführt wird. In diesem Fall wird der Befehluptime
ausgeführt, um die Systembetriebszeit zu protokollieren und Werte zu laden.Der Abschnitt
Install
definiert, wie der Service auf dem System installiert werden soll, wenn er aktiviert ist. Insbesondere wird der Service als Service hinzugefügt, derWantedBy
das "default.target" ist. Dies würde bedeuten, dass der Service als Teil des Standardziels für diesen Benutzer aktiviert ist. -
Führen Sie die systemd Einheit aus, und prüfen Sie deren Ausgabe.
Da Sie eine neue Einheit hinzugefügt haben, empfiehlt es sich in der Regel, die Systemkonfiguration neu zu laden, bevor Sie versuchen, den Service auszuführen:
systemctl --user daemon-reload
Starten Sie nun die neue Einheit.
systemctl --user start uptime
Prüfen Sie, ob der Befehl wie erwartet ausgeführt wurde. Sie können prüfen, ob der Service ausgeführt wurde, indem Sie dessen Status prüfen:
systemctl --user status uptime
Hinweis: Diese Befehle verwenden die Option
--user
, um innerhalb des Benutzers ausgeführt zu werden.Um die Ausgabe des ausgeführten Befehls
uptime
zu prüfen, zeigen Sie das Log mit dem Befehljournalctl
an, und geben Sie die Tagoption an, um die für den Befehl spezifischen Logs anzuzeigen:journalctl -t uptime
Sie können diesen Service so aktivieren, dass er gestartet wird, wenn sich der Benutzer zum ersten Mal beim System anmeldet.
systemctl --user enable uptime
Beachten Sie, dass der Service ausgeführt wird, wenn sich der Benutzer zum ersten Mal beim System anmeldet. Es wird beim Systemstart nicht automatisch gestartet. In der Regel werden Services, die im Benutzerspeicher ausgeführt werden, beendet, nachdem sich der Benutzer abgemeldet hat oder alle Benutzersessions beendet wurden. Das Aktivieren von Persistenz für Benutzerservices wird später in diesem Tutorial erläutert.
Mit systemd Timer-Einheiten arbeiten
In dieser Übung erstellen Sie auf der vorherigen Übung eine Timereinheit, die regelmäßig eine weitere systematische Einheit zu einem bestimmten Zeitpunkt oder Intervall ausführt. Timer-Einheiten können sowohl auf System- als auch auf Benutzerebene definiert werden. Sie können festlegen, wann systemd eine andere Einheit ausführen soll. Timer-Einheiten bieten granulare Kontrolle über geplante Ereignisse und können als Alternative zur Verwendung des Cron-Daemons dienen, um feinere Konfigurationen zu verarbeiten.
Viele Systemservices umfassen Timer-Einheiten, die steuern, wann sie ausgeführt werden. Ein hervorragendes Beispiel für eine Timereinheit ist im Package dnf-automatic
enthalten, mit dem Ihr System auf dem neuesten Stand gehalten werden kann, wenn es reguläre DNF-Updates automatisch ausführt. Um dies auf Systemebene zu sehen, installieren Sie das Paket und aktivieren die Timer-Einheit:
sudo dnf install -y dnf-automatic
sudo systemctl enable dnf-automatic.timer
Sie können die Einheitendatei anzeigen, um zu sehen, wie diese Einheit konfiguriert ist:
cat /usr/lib/systemd/system/dnf-automatic.timer
Notierbarer Inhalt in dieser Einheit enthalten eine Wants
-Zeile, die erwartet, dass die network-online.target
erfüllt wird. Der Eintrag OnCalendar
im Abschnitt Timer
der Konfiguration deutet darauf hin, dass diese Aktion täglich unter 06h00 ausgeführt wird. Interessant ist auch der Eintrag RandomizedDelaySec
, mit dem verhindert werden kann, dass Timer-Einheiten genau zur selben Zeit ausgelöst werden und die Systemlast plötzlich hochgestoßen wird.
Das hier dargestellte Beispiel ist Teil eines viel komplexeren Sets von Einheiten. Um die Funktionsweise von Timer-Einheiten besser zu verstehen, fügen Sie im Benutzerspeicher eine Timer-Einheit hinzu, um die in der vorherigen Übung erstellte uptime.service
so zu planen, dass sie in einem regulären Intervall ausgeführt wird.
-
Erstellen Sie eine Timer-Einheitendatei.
cat <<EOF > $HOME/.config/systemd/user/uptime.timer [Unit] Description=Timer for the uptime service that logs uptime Requires=uptime.service [Timer] Unit=uptime.service OnCalendar=*-*-* *:*:00 [Install] WantedBy=timers.target
Diese Datei gibt an, dass
uptime.service
für die Ausführung dieser Timereinheit erforderlich ist. Dies ist eine wesentlich stärkere Anforderung als jede in einerWants
-Definition definierte Definition, und die Einheit wird nicht ausgeführt, wenn die Anforderung nicht erfüllt ist.Der Abschnitt
Timer
definiert, dass die Einheituptime.service
mit einemOnCalendar
-Eintrag geladen wird. Der EintragOnCalendar
funktioniert ähnlich wie die Optionen in einer crontab-Definition, bietet jedoch mehr Granularität. In diesem Fall wird die Einheit so definiert, dass sie jede Minute bei 00 Sekunden ausgeführt wird. -
Da Sie die systemd-Konfiguration geändert haben, laden Sie systemd-Daemons neu und starten den Dienst für die Betriebszeit neu, sodass er die neue Timereinheit aufnehmen kann:
systemctl --user daemon-reload systemctl --user restart uptime
-
Listen Sie die Einheiten auf, um zu prüfen, ob die Einheiten
uptime.service
unduptime.timer
ausgeführt werden.systemctl --user list-units
-
Überwachen Sie die Logausgabe im Journal, um die Betriebszeitausgabe anzuzeigen, die vom Betriebszeitservice ausgelöst wird, der jede Minute ausgeführt wird.
journalctl -f -t uptime
Nach einigen Minuten sollten mehrere Zeilen der Ausgabe angezeigt werden. Wenn Sie aufmerksam gemacht haben, können Sie feststellen, dass der Befehl zur Betriebszeit nicht immer genau auf der Minute ausgelöst wird. Dies ist eine absichtliche Funktion innerhalb der systemd Timer-Funktionalität. Timerjobs werden mit einem Randomizer ausgelöst, mit dem eine Aufgabe mit einer Verzögerung von bis zu einer Minute ausgelöst werden kann. Dadurch wird verhindert, dass Timer zu genau derselben Zeit ausgelöst werden. Sie können erzwingen, dass ein Timer unglaublich genau ist, indem Sie die Genauigkeit innerhalb eines Nanosekunden des geplanten Ereignisses festlegen, indem Sie den folgenden Konfigurationseintrag zum Abschnitt
Timer
der Timereinheit hinzufügen:AccuracySec=1us
Für die meisten Aufgaben ist es jedoch sinnvoll, ein gewisses Maß an Ungenauigkeit zu gewährleisten, um zu verhindern, dass Aufgaben zu synchron ausgeführt werden.
Mit der Tastenkombination Strg-C können Sie das Journal beenden, wenn Sie die Überwachung abgeschlossen haben.
Konfigurieren Sie Userspace-Prozesse, um nach der Abmeldung fortzufahren
Standardmäßig werden Services und Prozesse, die gestartet werden und für die ein Benutzer verantwortlich ist, beendet, wenn sich der Benutzer abmeldet oder wenn alle Sessions für den Benutzer beendet wurden. Es gibt verschiedene Methoden, mit denen Sie dieses Standardverhalten innerhalb von systemd ändern können. Hier werden zwei Optionen vorgestellt.
Verwenden Sie den Befehl "loginctl", um systemd linger-Benutzer zu aktivieren
Mit dem Befehl loginctl können Sie das Standardverhalten eines bestimmten Benutzers ändern und Prozesse für diesen Benutzer nach Beendigung der Benutzersitzung auf "Lerner" setzen.
-
Verwenden Sie das Serviceprogramm loginctl, um Linger für einen bestimmten Benutzer zu aktivieren. Aktivieren Sie in diesem Fall das systemd-Verhalten für den Benutzer "oracle":
sudo loginctl enable-linger oracle
-
Um zu prüfen, ob die Einstellung angewendet wird, suchen Sie eine Datei mit demselben Namen wie der Benutzer im Verzeichnis
/var/lib/systemd/linger
.ls /var/lib/systemd/linger/oracle
Der Befehl muss prüfen, ob die Datei vorhanden ist.
Bearbeiten Sie die systemd logind.conf-Datei.
Systemd verwaltet Benutzeranmeldeereignisse und stellt eine Konfigurationsdatei bereit, die bearbeitet werden kann, um das Standardverhalten für verschiedene Ereignisse im Zusammenhang mit der Benutzersession festzulegen. Diese Konfigurationsdatei befindet sich unter /etc/systemd/logind.conf
.
-
Geben Sie den Inhalt der vorhandenen Konfiguration unter
/etc/systemd/logind.conf
auf dem Bildschirm aus, um Folgendes zu prüfen:cat /etc/systemd/logind.conf
Die meisten Optionen werden kommentiert, zeigen jedoch die Standardwerte für die Kompilierungszeit an. Diese Datei enthält drei Optionen, die steuern können, wie systemd Prozesse verarbeitet, die im Userspace ausgeführt werden, wenn die Benutzersession beendet wird.
KillUserProcesses
: Diese Option kann steuern, ob Benutzerprozesse beim Beenden der Session standardmäßig beendet werden. Wenn Sie diese Option auf "Nein" setzen, kann das System Benutzerprozesse ausführen, nachdem sich ein Benutzer vom System abmeldet.KillExcludeUsers
: Wenn die OptionKillUserProcesses
aktiviert ist, können Sie mit dieser Option eine durch Leerzeichen getrennte Liste der Benutzer angeben, für die systemd die Ausführung der Prozesse nach Beendigung der Session zulässt. Das Hinzufügen eines Benutzernamens zu dieser Liste verhält sich ähnlich wie das Hinzufügen eines Benutzers zur systemd linger-Gruppe mit dem Befehl loginctl.KillOnlyUsers
: Wenn die OptionKillUserProcesses
deaktiviert ist, kann mit diesem Parameter eine durch Leerzeichen getrennte Liste von Benutzern angegeben werden, deren Prozesse nach der Abmeldung beendet werden sollen.
Videodemonstration
Videodemos zu systemd finden Sie unter https://www.youtube.com/watch?v=9uDvnZKhU8A und https://www.youtube.com/watch?v=Tkxs-wfZrnw, wenn Sie weitere Informationen zur Arbeit mit dem systemd auf Oracle Linux 8 benötigen.
systemd System- und Servicemanager auf Oracle Linux 8
systemd Zieleinheiten auf Oracle Linux 8
Weitere Informationen
- Systemd-Dokumentation: https://systemd.io/
systemd(1)
Manuelle Seitesystemctl(1)
Manuelle Seitejournalctl(1)
Manuelle Seitesystemd.unit(5)
Manuelle Seitelogind.conf(5)
Manuelle Seite- Oracle Linux 8: Verwalten der Core-Systemkonfiguration
- Oracle Linux-Dokumentation
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.