Verwendung von Systemctl zum Verwalten von Systemd-Diensten und -Einheiten

Einführung

Systemd ist ein Init-System und ein Systemmanager, der zum neuen Standard für Linux-Maschinen wird. Zwar gibt es erhebliche Meinungen darüber, obsystemd eine Verbesserung gegenüber den herkömmlichenSysV-Init-Systemen darstellt, die es ersetzt, aber die Mehrheit der Distributionen plant, diese zu übernehmen oder hat dies bereits getan.

Aufgrund der starken Akzeptanz lohnt es sich, sich mitsystemd vertraut zu machen, da dies die Verwaltung von Servern erheblich vereinfacht. Wenn Sie die Tools und Daemons kennen und verwenden, aus denensystemd besteht, können Sie die Leistung, Flexibilität und Funktionen besser einschätzen oder zumindest Ihre Arbeit mit minimalem Aufwand erledigen.

In diesem Handbuch werden wir den Befehlsystemctl diskutieren, der das zentrale Verwaltungstool zur Steuerung des Init-Systems darstellt. Wir werden erläutern, wie Sie Dienste verwalten, den Status überprüfen, den Systemstatus ändern und mit den Konfigurationsdateien arbeiten.

Bitte beachten Sie, dasssystemd zwar für viele Linux-Distributionen zum Standard-Init-System geworden ist, jedoch nicht in allen Distributionen universell implementiert ist. Wenn Ihr Terminal in diesem Lernprogramm den Fehlerbash: systemctl is not installed ausgibt, ist wahrscheinlich auf Ihrem Computer ein anderes Init-System installiert.

Service-Management

Der grundlegende Zweck eines init-Systems besteht darin, die Komponenten zu initialisieren, die nach dem Booten des Linux-Kernels gestartet werden müssen (traditionell als "userland" -Komponenten bezeichnet). Das Init-System wird auch zum Verwalten von Diensten und Daemons für den Server verwendet, während das System ausgeführt wird. In diesem Sinne beginnen wir mit einigen einfachen Service-Management-Vorgängen.

Insystemd sind die Einheiten das Ziel der meisten Aktionen. Hierbei handelt es sich um Ressourcen, diesystemd verwalten kann. Einheiten werden nach dem Ressourcentyp kategorisiert, den sie darstellen, und sie werden mit Dateien definiert, die als Einheitendateien bezeichnet werden. Der Typ jeder Einheit kann dem Suffix am Ende der Datei entnommen werden.

Für Serviceverwaltungsaufgaben sind die Serviceeinheiten Serviceeinheiten mit Einheitendateien mit dem Suffix.service. Bei den meisten Dienstverwaltungsbefehlen können Sie jedoch das Suffix.service weglassen, dasystemd intelligent genug ist, um zu wissen, dass Sie wahrscheinlich einen Dienst bearbeiten möchten, wenn Sie Dienstverwaltungsbefehle verwenden.

Starten und Beenden von Diensten

Verwenden Sie den Befehlstart, um einensystemd-Dienst zu starten und Anweisungen in der Einheitendatei des Dienstes auszuführen. Wenn Sie als Nicht-Root-Benutzer ausgeführt werden, müssen Siesudo verwenden, da dies den Status des Betriebssystems beeinflusst:

sudo systemctl start application.service

Wie oben erwähnt, suchtsystemd nach*.service-Dateien für Dienstverwaltungsbefehle, sodass der Befehl genauso einfach wie folgt eingegeben werden kann:

sudo systemctl start application

Obwohl Sie das obige Format für die allgemeine Verwaltung verwenden können, verwenden wir aus Gründen der Übersichtlichkeit das Suffix.service, damit der Rest der Befehle explizit das Ziel angibt, auf dem wir arbeiten.

Um einen aktuell ausgeführten Dienst zu stoppen, können Sie stattdessen den Befehlstop verwenden:

sudo systemctl stop application.service

Neustart und Neuladen

Um einen laufenden Dienst neu zu starten, können Sie den Befehlrestart verwenden:

sudo systemctl restart application.service

Wenn die betreffende Anwendung ihre Konfigurationsdateien neu laden kann (ohne neu zu starten), können Sie den Befehlreload ausgeben, um diesen Prozess zu starten:

sudo systemctl reload application.service

Wenn Sie nicht sicher sind, ob der Dienst über die Funktionalität zum erneuten Laden seiner Konfiguration verfügt, können Sie den Befehlreload-or-restart ausgeben. Dadurch wird die Konfiguration direkt neu geladen, sofern verfügbar. Andernfalls wird der Dienst neu gestartet, sodass die neue Konfiguration übernommen wird:

sudo systemctl reload-or-restart application.service

Aktivieren und Deaktivieren von Diensten

Die obigen Befehle sind nützlich, um Befehle während der aktuellen Sitzung zu starten oder zu stoppen. Umsystemd anzuweisen, Dienste beim Booten automatisch zu starten, müssen Sie sie aktivieren.
Um einen Dienst beim Booten zu starten, verwenden Sie den Befehlenable:

sudo systemctl enable application.service

Dadurch wird eine symbolische Verknüpfung von der Systemkopie der Servicedatei (normalerweise in/lib/systemd/system oder/etc/systemd/system) zu dem Speicherort auf der Festplatte erstellt, an demsystemd nach Autostart-Dateien sucht (normalerweise/etc/systemd/system/some_target.target.wants). s. Wir werden später in diesem Handbuch noch genauer untersuchen, was ein Ziel ist.

Um zu verhindern, dass der Dienst automatisch gestartet wird, können Sie Folgendes eingeben:

sudo systemctl disable application.service

Dadurch wird die symbolische Verknüpfung entfernt, die angibt, dass der Dienst automatisch gestartet werden soll.

Beachten Sie, dass das Aktivieren eines Dienstes ihn in der aktuellen Sitzung nicht startet. Wenn Sie den Dienst starten und beim Booten aktivieren möchten, müssen Sie sowohl die Befehlestart als auchenable ausgeben.

Überprüfen des Status von Diensten

Um den Status eines Dienstes auf Ihrem System zu überprüfen, können Sie den Befehlstatus verwenden:

systemctl status application.service

Auf diese Weise erhalten Sie den Dienststatus, die Gruppenhierarchie und die ersten Protokollzeilen.

Wenn Sie beispielsweise den Status eines Nginx-Servers überprüfen, wird möglicherweise die folgende Ausgabe angezeigt:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2015-01-27 19:41:23 EST; 22h ago
 Main PID: 495 (nginx)
   CGroup: /system.slice/nginx.service
           ├─495 nginx: master process /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr;
           └─496 nginx: worker process
Jan 27 19:41:23 desktop systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 27 19:41:23 desktop systemd[1]: Started A high performance web server and a reverse proxy server.

Auf diese Weise erhalten Sie einen schönen Überblick über den aktuellen Status der Anwendung und werden über Probleme und erforderliche Maßnahmen informiert.

Es gibt auch Methoden zum Überprüfen auf bestimmte Zustände. Um beispielsweise zu überprüfen, ob eine Einheit derzeit aktiv ist (ausgeführt wird), können Sie den Befehlis-active verwenden:

systemctl is-active application.service

Dies gibt den aktuellen Einheitsstatus zurück, der normalerweiseactive oderinactive ist. Der Exit-Code lautet "0", wenn er aktiv ist, wodurch das programmgesteuerte Parsen des Ergebnisses vereinfacht wird.
Um festzustellen, ob das Gerät aktiviert ist, können Sie den Befehlis-enabled verwenden:

systemctl is-enabled application.service

Dies gibt aus, ob der Dienstenabled oderdisabled ist, und setzt den Exit-Code abhängig von der Antwort auf die Befehlsfrage erneut auf "0" oder "1".

Eine dritte Überprüfung ist, ob das Gerät in einem fehlerhaften Zustand ist. Dies weist darauf hin, dass beim Starten des betreffenden Geräts ein Problem aufgetreten ist:

systemctl is-failed application.service

Dies gibtactive zurück, wenn es ordnungsgemäß ausgeführt wird, oderfailed, wenn ein Fehler aufgetreten ist. Wenn das Gerät absichtlich gestoppt wurde, kann esunknown oderinactive zurückgeben. Ein Ausgangsstatus von "0" zeigt an, dass ein Fehler aufgetreten ist, und ein Ausgangsstatus von "1" zeigt einen anderen Status an.

Systemstatus - Übersicht

Die Befehle waren bisher für die Verwaltung einzelner Dienste hilfreich, sind jedoch nicht sehr hilfreich, um den aktuellen Status des Systems zu untersuchen. Es gibt eine Reihe vonsystemctl Befehlen, die diese Informationen bereitstellen.

Aktuelle Einheiten auflisten

Um eine Liste aller aktiven Einheiten anzuzeigen, diesystemdkennen, können Sie den Befehllist-unitsverwenden:

systemctl list-units

Dies zeigt Ihnen eine Liste aller Einheiten, diesystemd derzeit auf dem System aktiv haben. Die Ausgabe sieht ungefähr so ​​aus:

UNIT                                      LOAD   ACTIVE SUB     DESCRIPTION
atd.service                               loaded active running ATD daemon
avahi-daemon.service                      loaded active running Avahi mDNS/DNS-SD Stack
dbus.service                              loaded active running D-Bus System Message Bus
dcron.service                             loaded active running Periodic Command Scheduler
dkms.service                              loaded active exited  Dynamic Kernel Modules System
[email protected]                        loaded active running Getty on tty1
. . .

Die Ausgabe enthält die folgenden Spalten:

  • UNIT: Der Einheitenname vonsystemd

  • LOAD: Gibt an, ob die Konfiguration des Geräts umsystemd analysiert wurde. Die Konfiguration der geladenen Einheiten wird gespeichert.

  • ACTIVE: Ein zusammenfassender Status darüber, ob das Gerät aktiv ist. Dies ist normalerweise eine einfache Methode, um festzustellen, ob das Gerät erfolgreich gestartet wurde oder nicht.

  • SUB: Dies ist ein untergeordneter Status, der detailliertere Informationen zum Gerät anzeigt. Dies hängt häufig von Gerätetyp, Status und der tatsächlichen Methode ab, in der das Gerät ausgeführt wird.

  • DESCRIPTION: Eine kurze Textbeschreibung dessen, was die Einheit ist / tut.

Da der Befehllist-units standardmäßig nur aktive Einheiten anzeigt, werden in allen obigen Einträgen in der Spalte LOAD "geladen" und in der Spalte ACTIVE "aktiv" angezeigt. Diese Anzeige ist das Standardverhalten vonsystemctl, wenn sie ohne zusätzliche Befehle aufgerufen wird. Wenn Siesystemctl ohne Argumente aufrufen, wird dasselbe angezeigt.

systemctl

Wir könnensystemctl anweisen, unterschiedliche Informationen auszugeben, indem wir zusätzliche Flags hinzufügen. Um beispielsweise alle Einheiten anzuzeigen, diesystemd geladen hat (oder zu laden versucht hat), unabhängig davon, ob sie gerade aktiv sind, können Sie das Flag--all wie folgt verwenden:

systemctl list-units --all

Dies zeigt jede Einheit an, diesystemdgeladen hat oder zu laden versucht hat, unabhängig von ihrem aktuellen Status auf dem System. Einige Einheiten werden nach dem Ausführen inaktiv, und einige Einheiten, diesystemd zu laden versucht hat, wurden möglicherweise nicht auf der Festplatte gefunden.

Sie können andere Flags verwenden, um diese Ergebnisse zu filtern. Zum Beispiel können wir das--state=-Flag verwenden, um die Zustände LOAD, ACTIVE oder SUB anzugeben, die wir sehen möchten. Sie müssen das Flag--all beibehalten, damit insystemctl nicht aktive Einheiten angezeigt werden können:

systemctl list-units --all --state=inactive

Ein weiterer gängiger Filter ist der--type=-Filter. Wir könnensystemctl anweisen, nur Einheiten des Typs anzuzeigen, an dem wir interessiert sind. Um beispielsweise nur aktive Serviceeinheiten anzuzeigen, können wir Folgendes verwenden:

systemctl list-units --type=service

Auflisten aller Unit-Dateien

Der Befehllist-units zeigt nur Einheiten an, diesystemd versucht hat, zu analysieren und in den Speicher zu laden. Dasystemd nur Einheiten liest, die es für erforderlich hält, umfasst dies nicht unbedingt alle verfügbaren Einheiten im System. Um die verfügbare Einheitendatei voneveryin den Pfaden vonsystemdanzuzeigen, einschließlich derjenigen, diesystemd nicht zu laden versucht hat, können Sie stattdessen den Befehllist-unit-files verwenden:

systemctl list-unit-files

Einheiten sind Darstellungen von Ressourcen, diesystemdkennen. Dasystemd nicht unbedingt alle Einheitendefinitionen in dieser Ansicht gelesen hat, werden nur Informationen zu den Dateien selbst angezeigt. Die Ausgabe enthält zwei Spalten: die Unit-Datei und den Status.

UNIT FILE                                  STATE
proc-sys-fs-binfmt_misc.automount          static
dev-hugepages.mount                        static
dev-mqueue.mount                           static
proc-fs-nfsd.mount                         static
proc-sys-fs-binfmt_misc.mount              static
sys-fs-fuse-connections.mount              static
sys-kernel-config.mount                    static
sys-kernel-debug.mount                     static
tmp.mount                                  static
var-lib-nfs-rpc_pipefs.mount               static
org.cups.cupsd.path                        enabled
. . .

Der Status ist normalerweise "aktiviert", "deaktiviert", "statisch" oder "maskiert". Statisch bedeutet in diesem Zusammenhang, dass die Unit-Datei keinen Abschnitt „install“ enthält, der zum Aktivieren einer Unit verwendet wird. Daher können diese Einheiten nicht aktiviert werden. In der Regel bedeutet dies, dass die Einheit eine einmalige Aktion ausführt oder nur als Abhängigkeit von einer anderen Einheit verwendet wird und nicht für sich alleine ausgeführt werden sollte.

Wir werden kurz behandeln, was "maskiert" bedeutet.

Unit Management

Bisher haben wir mit Diensten gearbeitet und Informationen über das Gerät und die Gerätedateien angezeigt, diesystemdkennen. Mit einigen zusätzlichen Befehlen können wir jedoch genauere Informationen zu Einheiten erhalten.

Anzeigen einer Unit-Datei

Um die Einheitendatei anzuzeigen, diesystemd in sein System geladen hat, können Sie den Befehlcat verwenden (dies wurde insystemd Version 209 hinzugefügt). Um beispielsweise die Einheitendatei des Planungsdämons vonatdanzuzeigen, können Sie Folgendes eingeben:

systemctl cat atd.service
[Unit]
Description=ATD daemon
[Service]
Type=forking
ExecStart=/usr/bin/atd
[Install]
WantedBy=multi-user.target

Die Ausgabe ist die Einheitendatei, wie sie dem aktuell ausgeführtensystemd-Prozess bekannt ist. Dies kann wichtig sein, wenn Sie kürzlich Unit-Dateien geändert haben oder wenn Sie bestimmte Optionen in einem Unit-Dateifragment überschreiben (wir werden dies später behandeln).

Abhängigkeiten anzeigen

Um den Abhängigkeitsbaum einer Einheit anzuzeigen, können Sie den Befehllist-dependenciesverwenden:

systemctl list-dependencies sshd.service

Daraufhin wird eine Hierarchie angezeigt, die die Abhängigkeiten abbildet, die behandelt werden müssen, um die betreffende Einheit zu starten. Abhängigkeiten umfassen in diesem Zusammenhang diejenigen Einheiten, die von den darüber liegenden Einheiten benötigt oder gewünscht werden.

sshd.service
├─system.slice
└─basic.target
  ├─microcode.service
  ├─rhel-autorelabel-mark.service
  ├─rhel-autorelabel.service
  ├─rhel-configure.service
  ├─rhel-dmesg.service
  ├─rhel-loadmodules.service
  ├─paths.target
  ├─slices.target
. . .

Die rekursiven Abhängigkeiten werden nur für.target Einheiten angezeigt, die Systemzustände angeben. Um alle Abhängigkeiten rekursiv aufzulisten, schließen Sie das Flag--allein.

Um umgekehrte Abhängigkeiten anzuzeigen (Einheiten, die von der angegebenen Einheit abhängen), können Sie dem Befehl das Flag--reversehinzufügen. Andere nützliche Flags sind die Flags--before und--after, mit denen Einheiten angezeigt werden können, die von der angegebenen Einheit abhängen, die vor bzw. nach sich selbst beginnt.

Überprüfen der Geräteeigenschaften

Um die Eigenschaften einer Einheit auf niedriger Ebene anzuzeigen, können Sie den Befehlshow verwenden. Daraufhin wird eine Liste der Eigenschaften angezeigt, die für die angegebene Einheit im Formatkey=valuefestgelegt wurden:

systemctl show sshd.service
Id=sshd.service
Names=sshd.service
Requires=basic.target
Wants=system.slice
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=shutdown.target multi-user.target
After=syslog.target network.target auditd.service systemd-journald.socket basic.target system.slice
Description=OpenSSH server daemon
. . .

Wenn Sie eine einzelne Eigenschaft anzeigen möchten, können Sie das Flag-pmit dem Eigenschaftsnamen übergeben. Um beispielsweise die Konflikte in der Einheitsshd.serviceanzuzeigen, können Sie Folgendes eingeben:

systemctl show sshd.service -p Conflicts
Conflicts=shutdown.target

Einheiten maskieren und demaskieren

Wir haben im Abschnitt "Dienstverwaltung" gesehen, wie ein Dienst gestoppt oder deaktiviert wird.systemd kann jedoch auch eine Einheit alscompletely als nicht startbar markieren, automatisch oder manuell, indem sie mit/dev/null verknüpft wird . Dies wird als Maskieren der Einheit bezeichnet und ist mit dem Befehlmask möglich:

sudo systemctl mask nginx.service

Dadurch wird verhindert, dass der Nginx-Dienst automatisch oder manuell gestartet wird, solange er maskiert ist.

Wenn Sielist-unit-files überprüfen, wird der Dienst jetzt als maskiert aufgeführt:

systemctl list-unit-files
. . .
kmod-static-nodes.service              static
ldconfig.service                       static
mandb.service                          static
messagebus.service                     static
nginx.service                          masked
quotaon.service                        static
rc-local.service                       static
rdisc.service                          disabled
rescue.service                         static
. . .

Wenn Sie versuchen, den Dienst zu starten, wird eine Meldung wie die folgende angezeigt:

sudo systemctl start nginx.service
Failed to start nginx.service: Unit nginx.service is masked.

Verwenden Sie einfach den Befehlunmask, um eine Einheit zu demaskieren und wieder zur Verwendung verfügbar zu machen:

sudo systemctl unmask nginx.service

Dadurch wird das Gerät in den vorherigen Zustand zurückgesetzt und kann gestartet oder aktiviert werden.

Bearbeiten von Unit-Dateien

Während das spezifische Format für Einheitendateien außerhalb des Bereichs dieses Lernprogramms liegt, bietetsystemctl integrierte Mechanismen zum Bearbeiten und Ändern von Einheitendateien, wenn Sie Anpassungen vornehmen müssen. Diese Funktionalität wurde insystemd Version 218 hinzugefügt.

Der Befehledit öffnet standardmäßig ein Gerätedatei-Snippet für das betreffende Gerät:

sudo systemctl edit nginx.service

Dies ist eine leere Datei, die zum Überschreiben oder Hinzufügen von Anweisungen zur Einheitendefinition verwendet werden kann. Innerhalb des Verzeichnisses/etc/systemd/systemwird ein Verzeichnis erstellt, das den Namen der Einheit enthält, an die.dangehängt ist. Beispielsweise wird fürnginx.service ein Verzeichnis mit dem Namennginx.service.d erstellt.

In diesem Verzeichnis wird ein Snippet mit dem Namenoverride.conf erstellt. Wenn das Gerät geladen ist, führtsystemd im Speicher das Override-Snippet mit der vollständigen Gerätedatei zusammen. Die Anweisungen des Snippets haben Vorrang vor den Anweisungen in der ursprünglichen Gerätedatei.

Wenn Sie die vollständige Einheitendatei bearbeiten möchten, anstatt ein Snippet zu erstellen, können Sie das Flag--fullübergeben:

sudo systemctl edit --full nginx.service

Dadurch wird die aktuelle Einheitendatei in den Editor geladen, wo sie geändert werden kann. Wenn der Editor beendet wird, wird die geänderte Datei in/etc/systemd/system geschrieben, was Vorrang vor der Einheitendefinition des Systems hat (normalerweise irgendwo in/lib/systemd/system).

Um alle von Ihnen vorgenommenen Ergänzungen zu entfernen, löschen Sie entweder das Konfigurationsverzeichnis.ddes Geräts oder die geänderte Servicedatei aus/etc/systemd/system. Zum Entfernen eines Snippets können Sie beispielsweise Folgendes eingeben:

sudo rm -r /etc/systemd/system/nginx.service.d

Um eine vollständig geänderte Unit-Datei zu entfernen, geben Sie Folgendes ein:

sudo rm /etc/systemd/system/nginx.service

Nach dem Löschen der Datei oder des Verzeichnisses sollten Sie den Prozesssystemdneu laden, damit er nicht mehr versucht, auf diese Dateien zu verweisen, und wieder die Systemkopien verwendet. Sie können dies tun, indem Sie Folgendes eingeben:

sudo systemctl daemon-reload

Anpassen des Systemstatus (Runlevel) mit Targets

Ziele sind spezielle Unit-Dateien, die einen Systemstatus oder einen Synchronisationspunkt beschreiben. Wie bei anderen Einheiten können die Dateien, die Ziele definieren, anhand ihres Suffix identifiziert werden, das in diesem Fall.target beträgt. Ziele tun selbst nicht viel, sondern werden stattdessen verwendet, um andere Einheiten zu gruppieren.

Dies kann verwendet werden, um das System in bestimmte Zustände zu versetzen, ähnlich wie andere Init-Systeme Runlevel verwenden. Sie werden als Referenz verwendet, wenn bestimmte Funktionen verfügbar sind. So können Sie den gewünschten Status anstelle der einzelnen Einheiten angeben, die für die Erstellung dieses Status erforderlich sind.

Zum Beispiel gibt es einswap.target, das verwendet wird, um anzuzeigen, dass der Swap einsatzbereit ist. Einheiten, die Teil dieses Prozesses sind, können mit diesem Ziel synchronisiert werden, indem in ihrer Konfiguration angegeben wird, dass sieWantedBy= oderRequiredBy=swap.target sind. Einheiten, für die ein Austausch erforderlich ist, können diese Bedingung mithilfe der SpezifikationenWants=,Requires= undAfter=angeben, um die Art ihrer Beziehung anzugeben.

Abrufen und Festlegen des Standardziels

Der Prozesssystemdhat ein Standardziel, das beim Booten des Systems verwendet wird. Wenn Sie die Abhängigkeitskaskade von diesem einzelnen Ziel erfüllen, wird das System in den gewünschten Zustand versetzt. Geben Sie Folgendes ein, um das Standardziel für Ihr System zu ermitteln:

systemctl get-default
multi-user.target

Wenn Sie ein anderes Standardziel festlegen möchten, können Sieset-default verwenden. Wenn Sie beispielsweise einen grafischen Desktop installiert haben und möchten, dass das System diesen standardmäßig startet, können Sie Ihr Standardziel entsprechend ändern:

sudo systemctl set-default graphical.target

Liste der verfügbaren Ziele

Sie können eine Liste der verfügbaren Ziele auf Ihrem System abrufen, indem Sie Folgendes eingeben:

systemctl list-unit-files --type=target

Im Gegensatz zu Runleveln können mehrere Ziele gleichzeitig aktiv sein. Ein aktives Ziel zeigt an, dasssystemd versucht hat, alle an das Ziel gebundenen Einheiten zu starten, und nicht versucht hat, sie erneut abzureißen. Geben Sie Folgendes ein, um alle aktiven Ziele anzuzeigen:

systemctl list-units --type=target

Ziele isolieren

Es ist möglich, alle mit einem Ziel verknüpften Einheiten zu starten und alle Einheiten zu stoppen, die nicht Teil des Abhängigkeitsbaums sind. Der Befehl, den wir dazu benötigen, heißt entsprechendisolate. Dies ähnelt dem Ändern des Runlevels in anderen Init-Systemen.

Wenn Sie beispielsweise in einer grafischen Umgebung mitgraphical.target arbeiten, können Sie das grafische System herunterfahren und das System in einen Mehrbenutzer-Befehlszeilenstatus versetzen, indem Siemulti-user.target isolieren. Dagraphical.target vonmulti-user.target abhängt, aber nicht umgekehrt, werden alle grafischen Einheiten gestoppt.

Sie möchten möglicherweise einen Blick auf die Abhängigkeiten des zu isolierenden Ziels werfen, bevor Sie dieses Verfahren ausführen, um sicherzustellen, dass Sie wichtige Dienste nicht stoppen:

systemctl list-dependencies multi-user.target

Wenn Sie mit den Einheiten zufrieden sind, die am Leben erhalten werden, können Sie das Ziel einschränken, indem Sie Folgendes eingeben:

sudo systemctl isolate multi-user.target

Verwenden von Verknüpfungen für wichtige Ereignisse

Es sind Ziele für wichtige Ereignisse wie Ausschalten oder Neustarten definiert. systemctl verfügt jedoch auch über einige Verknüpfungen, die zusätzliche Funktionen hinzufügen.

Um das System beispielsweise in den Rettungsmodus (Einzelbenutzermodus) zu versetzen, können Sie anstelle vonisolate rescue.target einfach den Befehlrescue verwenden:

sudo systemctl rescue

Dies bietet die zusätzliche Funktionalität, alle angemeldeten Benutzer über das Ereignis zu benachrichtigen.

Um das System anzuhalten, können Sie den Befehlhalt verwenden:

sudo systemctl halt

Um ein vollständiges Herunterfahren einzuleiten, können Sie den Befehlpoweroff verwenden:

sudo systemctl poweroff

Ein Neustart kann mit dem Befehlreboot gestartet werden:

sudo systemctl reboot

Mit dieser Warnung werden alle angemeldeten Benutzer darüber informiert, dass das Ereignis eintritt. Dies reicht nicht aus, wenn das Ziel lediglich ausgeführt oder isoliert wird. Beachten Sie, dass die meisten Computer die kürzeren, konventionelleren Befehle für diese Vorgänge verknüpfen, damit sie ordnungsgemäß mitsystemd funktionieren.

Um beispielsweise das System neu zu starten, können Sie normalerweise Folgendes eingeben:

sudo reboot

Fazit

Inzwischen sollten Sie mit einigen grundlegenden Funktionen des Befehlssystemctlvertraut sein, mit denen Sie mit der Instanz vonsystemdinteragieren und diese steuern können. Das Dienstprogrammsystemctlist Ihr Hauptinteraktionspunkt für die Verwaltung von Diensten und Systemstatus.

Währendsystemctl hauptsächlich mit dem Kernprozesssystemdarbeitet, gibt es andere Komponenten im Ökosystem vonsystemd, die von anderen Versorgungsunternehmen gesteuert werden. Andere Funktionen wie Protokollverwaltung und Benutzersitzungen werden von separaten Daemons und Verwaltungsdienstprogrammen (journald /journalctl bzw.logind /loginctl) verwaltet. Wenn Sie sich Zeit nehmen, um sich mit diesen anderen Tools und Daemons vertraut zu machen, wird die Verwaltung zu einer einfacheren Aufgabe.