GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Systemd lieben lernen

systemd – ja, alles Kleinbuchstaben, sogar am Anfang eines Satzes – ist der moderne Ersatz für Init- und SystemV-Init-Skripte. Es ist auch viel mehr.

Wie die meisten Systemadministratoren denke ich, wenn ich an das Init-Programm und SystemV denke, an das Starten und Herunterfahren von Linux und nicht wirklich an viel mehr, wie das Verwalten von Diensten, sobald sie ausgeführt werden. Wie init ist systemd die Mutter aller Prozesse und dafür verantwortlich, den Linux-Host in einen Zustand zu bringen, in dem produktive Arbeit geleistet werden kann. Einige der Funktionen, die systemd übernimmt, das weitaus umfangreicher ist als das alte init-Programm, bestehen darin, viele Aspekte eines laufenden Linux-Hosts zu verwalten, einschließlich des Mountens von Dateisystemen, des Verwaltens von Hardware, des Umgangs mit Timern sowie des Startens und Verwaltens der erforderlichen Systemdienste um einen produktiven Linux-Host zu haben.

Diese Artikelserie basiert zum Teil auf Auszügen aus meinem dreibändigen Linux-Schulungskurs Linux verwenden und verwalten:Null bis Sysadmin , untersucht die Funktionen von systemd sowohl beim Start als auch zu Beginn nach dem Start.

Linux-Boot

Der vollständige Prozess, der einen Linux-Host von einem ausgeschalteten Zustand in einen laufenden Zustand versetzt, ist komplex, aber er ist offen und bekannt. Bevor ich auf die Details eingehe, gebe ich einen kurzen Überblick vom Einschalten der Host-Hardware bis zum Zeitpunkt, an dem das System für die Anmeldung eines Benutzers bereit ist. aber das ist nicht genau. Tatsächlich besteht der vollständige Boot- und Startvorgang aus drei Hauptteilen:

  • Hardwarestart: Initialisiert die Systemhardware
  • Linux-Boot: Lädt den Linux-Kernel und dann systemd
  • Linux-Startup: Wo systemd den Host für die produktive Arbeit vorbereitet

Die Linux-Startsequenz beginnt, nachdem der Kernel entweder init oder systemd geladen hat, je nachdem, ob die Distribution den alten oder neuen Start verwendet. Die Programme init und systemd starten und verwalten alle anderen Prozesse und sind beide als "Mutter aller Prozesse" auf ihren jeweiligen Systemen bekannt.

Wichtig ist, den Hardware-Boot vom Linux-Boot vom Linux-Start zu trennen und die Abgrenzungspunkte zwischen ihnen explizit zu definieren. Das Verständnis dieser Unterschiede und der Rolle, die jeder dabei spielt, ein Linux-System in einen Zustand zu versetzen, in dem es produktiv sein kann, macht es möglich, diese Prozesse zu verwalten und besser zu bestimmen, wo ein Problem auftritt, während das, was die meisten Leute als „Booten“ bezeichnen.

Der Startvorgang folgt dem dreistufigen Bootvorgang und bringt den Linux-Rechner in einen Betriebszustand, in dem er für produktives Arbeiten nutzbar ist. Der Startvorgang beginnt, wenn der Kernel die Kontrolle über den Host an systemd übergibt.

Systemd-Kontroverse

systemd kann eine breite Palette von Reaktionen von Systemadministratoren und anderen hervorrufen, die dafür verantwortlich sind, Linux-Systeme am Laufen zu halten. Die Tatsache, dass systemd so viele Aufgaben in vielen Linux-Systemen übernimmt, hat zu Widerständen und Zwietracht unter bestimmten Gruppen von Entwicklern und Systemadministratoren geführt.

SystemV und systemd sind zwei verschiedene Methoden zum Ausführen der Linux-Startsequenz. SystemV-Startskripte und das Init-Programm sind die alten Methoden, und systemd mit Zielen ist die neue Methode. Obwohl die meisten modernen Linux-Distributionen das neuere Systemd für das Starten, Herunterfahren und die Prozessverwaltung verwenden, gibt es immer noch einige, die dies nicht tun. Ein Grund dafür ist, dass einige Distributionsbetreuer und Systemadministratoren die ältere SystemV-Methode der neueren Systemd-Methode vorziehen.

Ich denke beides hat Vorteile.

Warum ich SystemV bevorzuge

Ich bevorzuge SystemV, weil es offener ist. Der Start erfolgt mithilfe von Bash-Skripten. Nachdem der Kernel das init-Programm gestartet hat, das eine kompilierte Binärdatei ist, startet init die rc.sysinit -Skript, das viele Systeminitialisierungsaufgaben ausführt. Nach rc.sysinit abgeschlossen ist, startet init /etc/rc.d/rc -Skript, das wiederum die verschiedenen Dienste startet, die von den SystemV-Startskripten in /etc/rc.d/rcX.d definiert werden , wobei "X" die Nummer des gestarteten Runlevels ist.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Mit Ausnahme des Init-Programms selbst sind alle diese Programme offene und leicht erkennbare Skripte. Es ist möglich, diese Skripte durchzulesen und genau zu erfahren, was während des gesamten Startvorgangs passiert, aber ich glaube nicht, dass viele Systemadministratoren das tatsächlich tun. Jedes Startskript ist nummeriert, sodass es seinen vorgesehenen Dienst in einer bestimmten Reihenfolge startet. Dienste werden seriell gestartet, und es wird jeweils nur ein Dienst gestartet.

systemd, entwickelt von Lennart Poettering und Kay Sievers von Red Hat, ist ein komplexes System aus großen, kompilierten, ausführbaren Binärdateien, die ohne Zugriff auf den Quellcode nicht verständlich sind. Es ist Open Source, daher ist der "Zugriff auf den Quellcode" nicht schwer, nur weniger bequem. systemd scheint eine bedeutende Widerlegung mehrerer Grundsätze der Linux-Philosophie darzustellen. Als Binärdatei ist systemd nicht direkt für den Systemadministrator offen, um ihn anzuzeigen oder einfache Änderungen vorzunehmen. systemd versucht, alles zu tun, wie z. B. das Verwalten laufender Dienste, und liefert dabei deutlich mehr Statusinformationen als SystemV. Es verwaltet auch Hardware, Prozesse und Gruppen von Prozessen, Dateisystem-Mounts und vieles mehr. systemd ist in fast jedem Aspekt des modernen Linux-Hosts vorhanden und ist damit das One-Stop-Tool für die Systemverwaltung. All dies ist ein klarer Verstoß gegen die Grundsätze, dass Programme klein sein sollten und dass jedes Programm eine Sache tun sollte, und zwar gut.

Warum ich systemd bevorzuge

Ich bevorzuge systemd als meinen Startmechanismus, weil es so viele Dienste wie möglich parallel startet, abhängig von der aktuellen Phase des Startvorgangs. Dies beschleunigt den gesamten Start und bringt das Hostsystem schneller zu einem Anmeldebildschirm als SystemV.

systemd verwaltet fast jeden Aspekt eines laufenden Linux-Systems. Es kann laufende Dienste verwalten und dabei deutlich mehr Statusinformationen liefern als SystemV. Es verwaltet auch Hardware, Prozesse und Gruppen von Prozessen, Dateisystem-Mounts und vieles mehr. systemd ist in fast jedem Aspekt des modernen Linux-Betriebssystems vorhanden und ist damit das One-Stop-Tool für die Systemverwaltung. (Kommt das bekannt vor?)

Die systemd-Tools sind kompilierte Binärdateien, aber die Tool-Suite ist offen, da alle Konfigurationsdateien ASCII-Textdateien sind. Die Startkonfiguration kann über verschiedene GUI- und Befehlszeilen-Tools geändert werden, sowie verschiedene Konfigurationsdateien hinzugefügt oder geändert werden, um sie an die Anforderungen der spezifischen lokalen Computerumgebung anzupassen.

Das eigentliche Problem

Dachten Sie, ich könnte beide Startsysteme nicht mögen? Das tue ich, und ich kann mit beiden arbeiten.

Meiner Meinung nach besteht das eigentliche Problem und die Hauptursache der meisten Kontroversen zwischen SystemV und Systemd darin, dass es auf der Sysadmin-Ebene keine Wahl gibt. Die Entscheidung, ob SystemV oder Systemd verwendet werden soll, wurde bereits von den Entwicklern, Betreuern und Paketierern der verschiedenen Distributionen getroffen – aber mit gutem Grund. Das Aushöhlen und Ersetzen eines Init-Systems hat aufgrund seiner extremen, invasiven Natur viele Konsequenzen, die außerhalb des Verteilungsdesignprozesses schwer zu bewältigen wären.

Trotz der Tatsache, dass diese Wahl für mich getroffen wird, starten meine Linux-Hosts und funktionieren, was mir normalerweise am wichtigsten ist. Als Endbenutzer und sogar als Systemadministrator ist meine Hauptsorge, ob ich meine Arbeit erledigen kann, Arbeiten wie das Schreiben meiner Bücher und dieses Artikels, das Installieren von Updates und das Schreiben von Skripten, um alles zu automatisieren. Solange ich meine Arbeit erledigen kann, ist mir die Startsequenz meiner Distribution egal.

Ich kümmere mich, wenn es ein Problem während des Starts oder der Serviceverwaltung gibt. Unabhängig davon, welches Startsystem auf einem Host verwendet wird, weiß ich genug, um die Abfolge der Ereignisse zu verfolgen, um den Fehler zu finden und zu beheben.

SystemV ersetzen

Es gab frühere Versuche, SystemV durch etwas moderneres zu ersetzen. Für ungefähr zwei Releases verwendete Fedora ein Ding namens Upstart, um das alternde SystemV zu ersetzen, aber es ersetzte nicht init und lieferte keine Änderungen, die ich bemerkte. Da Upstart keine wesentlichen Änderungen an den Problemen rund um SystemV vorgenommen hat, wurden Bemühungen in diese Richtung schnell zugunsten von Systemd eingestellt.

Trotz der Tatsache, dass die meisten Linux-Entwickler darin übereinstimmen, dass es eine gute Idee ist, das alte SystemV-Startup zu ersetzen, mögen viele Entwickler und Systemadministratoren Systemd dafür nicht. Anstatt all die sogenannten Probleme aufzuwärmen, die Leute mit systemd haben oder hatten, werde ich Sie auf zwei gute, wenn auch etwas alte Artikel verweisen, die fast alles abdecken sollten. Linus Torvalds, der Schöpfer des Linux-Kernels, scheint desinteressiert. In einem ZDNet-Artikel von 2014 Linus Torvalds und andere über Linuxs systemd , Linus ist sich seiner Gefühle bewusst.

„Ich habe eigentlich keine besonders starke Meinung zu systemd selbst. Ich hatte Probleme mit einigen der Core-Entwickler, die meiner Meinung nach viel zu unbekümmert in Bezug auf Fehler und Kompatibilität sind, und ich denke, dass einige der Designdetails verrückt sind (I mag zum Beispiel die Binärlogs nicht), aber das sind Details, keine großen Probleme."

Für den Fall, dass Sie nicht viel über Linus wissen, kann ich Ihnen sagen, dass er, wenn er etwas nicht mag, seine Abneigung sehr offen und deutlich äußert. Er ist in seiner Art, seine Abneigung gegenüber Dingen anzusprechen, gesellschaftlich akzeptabler geworden.

Im Jahr 2013 schrieb Poettering einen langen Blogbeitrag, in dem er die Mythen über systemd entlarvt und gleichzeitig einen Einblick in einige der Gründe für seine Erstellung gibt. Dies ist eine sehr gute Lektüre und ich kann es nur wärmstens empfehlen.

systemd-Aufgaben

Abhängig von den während des Kompilierungsprozesses verwendeten Optionen (die in dieser Serie nicht berücksichtigt werden), kann systemd bis zu 69 ausführbare Binärdateien haben, die unter anderem die folgenden Aufgaben ausführen:

  • Das systemd-Programm läuft als PID 1 und bietet einen Systemstart von so vielen Diensten wie möglich parallel, was als Nebeneffekt die Gesamtstartzeiten beschleunigt. Es verwaltet auch die Abschaltsequenz.
  • Das Programm systemctl stellt eine Benutzerschnittstelle für die Dienstverwaltung bereit.
  • Unterstützung für SystemV- und LSB-Startskripte wird aus Gründen der Abwärtskompatibilität angeboten.
  • Dienstverwaltung und Berichterstellung bieten mehr Dienststatusdaten als SystemV.
  • Es enthält Tools für die grundlegende Systemkonfiguration, wie Hostname, Datum, Gebietsschema, Listen angemeldeter Benutzer, laufende Container und virtuelle Maschinen, Systemkonten, Laufzeitverzeichnisse und -einstellungen, Daemons zur Verwaltung einfacher Netzwerkkonfiguration, Netzwerkzeitsynchronisierung , Protokollweiterleitung und Namensauflösung.
  • Es bietet Socket-Management.
  • Systemd-Timer bieten erweiterte Cron-ähnliche Fähigkeiten, um ein Skript zeitweise in Bezug auf den Systemstart, den Systemstart, den letzten Start des Timers und mehr auszuführen.
  • Es bietet ein Tool zum Analysieren von Datums- und Zeitangaben, die in Timer-Spezifikationen verwendet werden.
  • Das Mounten und Unmounten von Dateisystemen mit hierarchischem Bewusstsein ermöglicht eine sicherere Kaskadierung von gemounteten Dateisystemen.
  • Es ermöglicht die positive Erstellung und Verwaltung von temporären Dateien, einschließlich des Löschens.
  • Eine Schnittstelle zu D-Bus bietet die Möglichkeit, Skripte auszuführen, wenn Geräte angeschlossen oder entfernt werden. Dadurch können alle Geräte, ob steckbar oder nicht, als Plug-and-Play behandelt werden, was die Gerätehandhabung erheblich vereinfacht.
  • Sein Tool zur Analyse der Startsequenz kann verwendet werden, um die Dienste zu finden, die die meiste Zeit in Anspruch nehmen.
  • Es enthält Journale zum Speichern von Systemprotokollmeldungen und Tools zum Verwalten der Journale.

Architektur

Diese Aufgaben und mehr werden von einer Reihe von Daemons, Steuerprogrammen und Konfigurationsdateien unterstützt. Abbildung 1 zeigt viele der Komponenten, die zu systemd gehören. Dies ist ein vereinfachtes Diagramm, das einen allgemeinen Überblick bieten soll und daher nicht alle einzelnen Programme oder Dateien enthält. Es gibt auch keinen Einblick in den Datenfluss, der so komplex ist, dass er im Kontext dieser Artikelserie eine nutzlose Übung wäre.

Eine vollständige Darstellung von systemd würde ein eigenes Buch erfordern. Sie müssen nicht genau verstehen, wie die systemd-Komponenten in Abbildung 1 zusammenpassen; Es reicht aus, die Programme und Komponenten zu kennen, die es ermöglichen, verschiedene Linux-Dienste zu verwalten und mit Protokolldateien und Journalen umzugehen. Aber es ist klar, dass systemd nicht die monolithische Monstrosität ist, als die es von einigen seiner Kritiker behauptet wird.

systemd als PID 1

systemd ist PID 1. Einige seiner Funktionen, die weitaus umfangreicher sind als das alte SystemV3-Init-Programm, bestehen darin, viele Aspekte eines laufenden Linux-Hosts zu verwalten, einschließlich des Mountens von Dateisystemen und des Startens und Verwaltens von Systemdiensten, die für einen produktiven Linux-Host erforderlich sind. Alle Aufgaben von systemd, die sich nicht auf die Startsequenz beziehen, liegen außerhalb des Rahmens dieses Artikels (aber einige werden später in dieser Serie untersucht).

Zuerst mountet systemd die von /etc/fstab definierten Dateisysteme , einschließlich aller Auslagerungsdateien oder Partitionen. An diesem Punkt kann es auf die Konfigurationsdateien zugreifen, die sich in /etc befinden , einschließlich seiner eigenen. Es verwendet seinen Konfigurationslink /etc/systemd/system/default.target , um zu bestimmen, in welchen Zustand oder welches Ziel der Host gebootet werden soll. Das default.target file ist ein symbolischer Link auf die wahre Zieldatei. Bei einer Desktop-Workstation ist dies normalerweise graphical.target , was Runlevel 5 in SystemV entspricht. Für einen Server ist der Standardwert eher multi-user.target , was wie Runlevel 3 in SystemV ist. Das emergency.target ähnelt dem Einzelbenutzermodus. Ziele und Dienste sind systemd-Einheiten.

Die folgende Tabelle (Abbildung 2) vergleicht die systemd-Ziele mit den alten SystemV-Start-Runlevels. systemd stellt die Systemd-Zielaliase für die Abwärtskompatibilität bereit. Die Ziel-Aliase erlauben Skripten – und vielen Systemadministratoren – die Verwendung von SystemV-Befehlen wie init 3 Runlevel ändern. Natürlich werden die SystemV-Befehle zur Interpretation und Ausführung an systemd weitergeleitet.

systemd-Ziele SystemV-Runlevel Zielaliase Beschreibung
default.target     Diesem Ziel wird immer ein Alias ​​mit einem symbolischen Link zu entweder multi-user.target zugewiesen oder graphical.target . systemd verwendet immer das default.target um das System zu starten. Das default.target sollte niemals zu halt.target aliased werden , poweroff.target oder reboot.target .
Grafik.Ziel 5 runlevel5.ziel Multi-user.target mit einer GUI
  4 runlevel4.ziel Unbenutzt. Runlevel 4 war identisch mit Runlevel 3 in der SystemV-Welt. Dieses Ziel kann erstellt und angepasst werden, um lokale Dienste zu starten, ohne das standardmäßige multi-user.target zu ändern .
multi-user.target 3 runlevel3.ziel Alle Dienste laufen, aber nur Befehlszeilenschnittstelle (CLI)
  2 runlevel2.ziel Mehrbenutzer, ohne NFS, aber alle anderen Nicht-GUI-Dienste laufen
rescue.target 1 runlevel1.ziel Ein einfaches System, einschließlich des Mountens der Dateisysteme, wobei nur die grundlegendsten Dienste ausgeführt werden, und eine Notfall-Shell auf der Hauptkonsole
emergency.target S   Einzelbenutzermodus – es werden keine Dienste ausgeführt; Dateisysteme werden nicht gemountet. Dies ist die grundlegendste Betriebsebene, bei der nur eine Notfall-Shell auf der Hauptkonsole ausgeführt wird, damit der Benutzer mit dem System interagieren kann.
halt.ziel     Hält das System an, ohne es herunterzufahren
reboot.target 6 runlevel6.ziel Neu starten
poweroff.target 0 runlevel0.ziel Hält das System an und schaltet den Strom aus

Jedes Ziel hat eine Reihe von Abhängigkeiten, die in seiner Konfigurationsdatei beschrieben sind. systemd startet die erforderlichen Abhängigkeiten, bei denen es sich um die Dienste handelt, die erforderlich sind, um den Linux-Host auf einer bestimmten Funktionalitätsebene auszuführen. Wenn alle in den Zielkonfigurationsdateien aufgeführten Abhängigkeiten geladen sind und ausgeführt werden, wird das System auf dieser Zielebene ausgeführt. In Abbildung 2 befinden sich die Ziele mit den meisten Funktionen ganz oben in der Tabelle, wobei die Funktionalität zum Ende der Tabelle hin abnimmt.

systemd sieht auch in den alten SystemV-Init-Verzeichnissen nach, ob dort Startdateien vorhanden sind. Wenn dies der Fall ist, verwendet systemd sie als Konfigurationsdateien, um die von den Dateien beschriebenen Dienste zu starten. Der veraltete Netzwerkdienst ist ein gutes Beispiel für einen Dienst, der immer noch SystemV-Startdateien in Fedora verwendet.

Abbildung 3 (unten) wird direkt von der Bootup-Manpage kopiert. Es zeigt eine Karte der allgemeinen Abfolge von Ereignissen während des systemd-Starts und der grundlegenden Reihenfolgeanforderungen, um einen erfolgreichen Start sicherzustellen.

                                         cryptsetup-pre.target
                                                   |
 (various low-level                                v
     API VFS mounts:                 (various cryptsetup devices...)
  mqueue, configfs,                                |    |
  debugfs, ...)                                    v    |
  |                                  cryptsetup.target  |
  |  (various swap                                 |    |    remote-fs-pre.target
  |   devices...)                                  |    |     |        |
  |    |                                           |    |     |        v
  |    v                       local-fs-pre.target |    |     |  (network file systems)
  |  swap.target                       |           |    v     v                 |
  |    |                               v           |  remote-cryptsetup.target  |
  |    |  (various low-level  (various mounts and  |             |              |
  |    |   services: udevd,    fsck services...)   |             |    remote-fs.target
  |    |   tmpfiles, random            |           |             |             /
  |    |   seed, sysctl, ...)          v           |             |            /
  |    |      |                 local-fs.target    |             |           /
  |    |      |                        |           |             |          /
  \____|______|_______________   ______|___________/             |         /
                              \ /                                |        /
                               v                                 |       /
                        sysinit.target                           |      /
                               |                                 |     /
        ______________________/|\_____________________           |    /
       /              |        |      |               \          |   /
       |              |        |      |               |          |  /
       v              v        |      v               |          | /
  (various       (various      |  (various            |          |/
   timers...)      paths...)   |   sockets...)        |          |
       |              |        |      |               |          |
       v              v        |      v               |          |
 timers.target  paths.target   |  sockets.target      |          |
       |              |        |      |               v          |
       v              \_______ | _____/         rescue.service   |
                              \|/                     |          |
                               v                      v          |
                           basic.target         rescue.target    |
                               |                                 |
                       ________v____________________             |
                      /              |              \            |
                      |              |              |            |
                      v              v              v            |
                  display-    (various system   (various system  |
              manager.service     services        services)      |
                      |         required for        |            |
                      |        graphical UIs)       v            v
                      |              |            multi-user.target
 emergency.service    |              |              |
         |            \_____________ | _____________/
         v                          \|/
 emergency.target                    v
                              graphical.target

Das sysinit.target und basic.target Ziele können im Startprozess als Prüfpunkte betrachtet werden. Obwohl eines der Designziele von systemd darin besteht, Systemdienste parallel zu starten, müssen bestimmte Dienste und funktionale Ziele gestartet werden, bevor andere Dienste und Ziele gestartet werden können. Diese Kontrollpunkte können nicht passiert werden, bis alle von diesem Kontrollpunkt geforderten Dienste und Ziele erfüllt sind.

Das sysinit.target ist erreicht, wenn alle Einheiten, von denen es abhängt, abgeschlossen sind. Alle diese Einheiten, das Mounten von Dateisystemen, das Einrichten von Auslagerungsdateien, das Starten von udev, das Setzen des Zufallsgenerator-Seeds, das Initiieren von Low-Level-Diensten und das Einrichten von kryptografischen Diensten (wenn ein oder mehrere Dateisysteme verschlüsselt sind), müssen abgeschlossen werden, aber innerhalb der sysinit.target , können diese Aufgaben parallel ausgeführt werden.

Das sysinit.target startet alle Low-Level-Dienste und -Einheiten, die erforderlich sind, damit das System geringfügig funktionsfähig ist, und die erforderlich sind, um den Wechsel zum basic.target zu ermöglichen .

Nach sysinit.target erfüllt ist, startet systemd dann alle Einheiten, die zur Erfüllung des nächsten Ziels erforderlich sind. Das Basisziel bietet einige zusätzliche Funktionalität, indem Einheiten gestartet werden, die für alle nächsten Ziele erforderlich sind. Dazu gehört das Einrichten von Dingen wie Pfaden zu verschiedenen ausführbaren Verzeichnissen, Kommunikations-Sockets und Timern.

Schließlich die Ziele auf Benutzerebene, multi-user.target oder graphical.target , kann initialisiert werden. Das multi-user.target muss erreicht werden, bevor die grafischen Zielabhängigkeiten erfüllt werden können. Die unterstrichenen Ziele in Abbildung 3 sind die üblichen Startziele. Wenn eines dieser Ziele erreicht ist, ist der Startvorgang abgeschlossen. Wenn das multi-user.target die Standardeinstellung ist, dann sollten Sie eine Anmeldung im Textmodus auf der Konsole sehen. Wenn graphical.target die Standardeinstellung ist, dann sollten Sie eine grafische Anmeldung sehen; Der spezifische GUI-Anmeldebildschirm, den Sie sehen, hängt von Ihrem Standard-Display-Manager ab.

Die Bootup-Manpage beschreibt und stellt auch Abbildungen des Bootvorgangs in die anfängliche RAM-Disk und den systemd-Shutdown-Prozess bereit.

systemd bietet auch ein Tool, das Abhängigkeiten eines vollständigen Starts oder für eine bestimmte Einheit auflistet. Eine Unit ist eine steuerbare systemd-Ressourcenentität, die von einem bestimmten Dienst wie httpd oder sshd bis hin zu Timern, Mounts, Sockets und mehr reichen kann. Probieren Sie den folgenden Befehl aus und scrollen Sie durch die Ergebnisse.

systemctl list-dependencies graphical.target

Beachten Sie, dass dies die Zieleinheitenliste der obersten Ebene vollständig erweitert, die erforderlich ist, um das System in den grafischen Ziellaufmodus zu bringen. Verwenden Sie --all Möglichkeit, auch alle anderen Einheiten zu erweitern.

systemctl list-dependencies --all graphical.target

Sie können mit den Suchwerkzeugen von weniger nach Zeichenfolgen wie „Ziel“, „Slice“ und „Socket“ suchen Befehl.

Versuchen Sie jetzt Folgendes.

systemctl list-dependencies multi-user.target

und

systemctl list-dependencies rescue.target

und

systemctl list-dependencies local-fs.target

und

systemctl list-dependencies dbus.service

Dieses Tool hilft mir, die Besonderheiten der Startabhängigkeiten für den Host zu visualisieren, an dem ich arbeite. Machen Sie weiter und verbringen Sie einige Zeit damit, den Startbaum für einen oder mehrere Ihrer Linux-Hosts zu erkunden. Aber seien Sie vorsichtig, denn die Systemctl-Manpage enthält diesen Hinweis:

"Beachten Sie, dass dieser Befehl nur Einheiten auflistet, die aktuell vom Dienstmanager in den Speicher geladen wurden. Insbesondere ist dieser Befehl nicht geeignet, um eine umfassende Liste aller umgekehrten Abhängigkeiten von einer bestimmten Einheit zu erhalten, da er die Abhängigkeiten nicht auflistet deklariert von derzeit nicht geladenen Einheiten."

Abschließende Gedanken

Noch bevor Sie sehr tief in systemd einsteigen, ist es offensichtlich, dass es sowohl leistungsfähig als auch komplex ist. Es ist auch offensichtlich, dass systemd keine einzelne, riesige, monolithische und unerkennbare Binärdatei ist. Vielmehr besteht es aus einer Reihe kleinerer Komponenten und Unterbefehle, die dazu bestimmt sind, bestimmte Aufgaben auszuführen.

Der nächste Artikel in dieser Reihe wird den Systemstart detaillierter untersuchen, sowie Systemd-Konfigurationsdateien, das Ändern des Standardziels und das Erstellen einer einfachen Service-Unit.

Ressourcen

Es gibt eine Menge Informationen über systemd im Internet, aber vieles ist knapp, stumpf oder sogar irreführend. Zusätzlich zu den in diesem Artikel erwähnten Ressourcen bieten die folgenden Webseiten detailliertere und zuverlässigere Informationen zum Systemstart.

  • Das Fedora-Projekt hat eine gute, praktische Anleitung zu systemd. Es enthält so ziemlich alles, was Sie wissen müssen, um einen Fedora-Computer mit systemd zu konfigurieren, zu verwalten und zu warten.
  • Das Fedora-Projekt hat auch einen guten Spickzettel, der die alten SystemV-Befehle mit vergleichbaren Systemd-Befehlen vergleicht.
  • Detaillierte technische Informationen über systemd und die Gründe für seine Erstellung finden Sie in der Beschreibung von systemd auf Freedesktop.org.
  • Linux.com's "More systemd fun" bietet weiterführende Informationen und Tipps zu systemd.

Es gibt auch eine Reihe von sehr technischen Artikeln für Linux-Systemadministratoren von Lennart Poettering, dem Designer und Hauptentwickler von systemd. Diese Artikel wurden zwischen April 2010 und September 2011 geschrieben, sind aber heute genauso aktuell wie damals. Vieles von allem anderen Guten, das über systemd und sein Ökosystem geschrieben wurde, basiert auf diesen Papieren.

  • Überdenken von PID 1
  • systemd für Administratoren, Teil I
  • systemd für Administratoren, Teil II
  • systemd für Administratoren, Teil III
  • systemd für Administratoren, Teil IV
  • systemd für Administratoren, Teil V
  • systemd für Administratoren, Teil VI
  • systemd für Administratoren, Teil VII
  • systemd für Administratoren, Teil VIII
  • systemd für Administratoren, Teil IX
  • systemd für Administratoren, Teil X
  • systemd für Administratoren, Teil XI

Linux
  1. 10 Gründe, Linux im Jahr 2021 zu lieben

  2. 5 Gründe, warum Systemadministratoren systemd lieben

  3. Verwalten Sie den Start mit systemd

  4. Wie das Lernen von Linux unsere Liebessprache ist

  5. Liste der Startanwendung unter Linux abrufen

Warum ich KDE für meinen Linux-Desktop liebe

5 Gründe, warum ich es liebe, unter Linux zu programmieren

Analysieren Sie die Startleistung von Linux

Meine Linux-Story:Linux lernen in den 90ern

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

CURL-Linux-Befehl:Lernen am Beispiel