|
|
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| '''systemd''' - [[Init-System]] und Systemmanager | | '''systemd''' - [[Init-System]] und Systemmanager |
|
| |
|
| == Beschreibung == | | {| class="wikitable options" |
| *Bei einer Reihe von Distributionen kümmert sich mittlerweile nicht mehr Sysvinit, sondern Systemd um den Systemstart.
| | |- |
| *Das erst zwei Jahre alte Init-System verspricht den Bootprozess zu beschleunigen und erfordert keine explizite Konfiguration der Abhängigkeiten zwischen Systemdiensten; nebenbei schafft es einige distributionsspezifische Eigenarten aus der Welt.
| | | Beschreibung || [[Systemd/Beschreibung]] |
| *Bei Linux-Distributionen übergibt der Kernel traditionell '''Sysvinit '''die Verantwortung zur Einrichtung des Systems.
| | |- |
| * Einige Jahre sah alles danach aus, als würde '''Upstart '''das angestaubte, aber noch weitverbreitete Init-System beerben, doch mittlerweile immer mehr Distributionen auf '''Systemd '''um – '''abgesehen von Ubuntu ''', das laut Mark Suttleworth auf absehbare Zeit bei Upstart bleiben wird.
| | | Installation || [[Systemd/Installation]] |
| *Fedora nutzt Systemd seit Version 15, auch in OpenSuse und Mandriva 2011 kommt das neue Init-System zum Einsatz; Mageia steigt mit Version 2 um.
| | |- |
| * Bei Arch Linux und Gentoo sowie Debian Testing liegt Systemd bei; bei einigen weitere Distributionen wird der optionale Einsatz oder der Umstieg diskutiert.
| | | Syntax || [[Systemd/Syntax]] |
| * Eine der Besonderheiten von Systemd ist der parallele Start von Hintergrunddiensten, ohne dass Abhängigkeiten zwischen diesen explizit festgelegt werden müssen; das nutzt Hardware-Ressourcen effizienter und lässt das System flott starten.
| | |- |
| *Systemd erledigt zudem einige Aufgaben, um die sich bislang meist distributionsspezifische Skripte kümmern; ganz nebenbei beseitigt es damit einige Unterschiede bei der Bedienung und Konfiguration von Distributionen.
| | | Anwendung || [[Systemd/Anwendung]] |
| * starken Verbreitung
| | |- |
| * weitgehend neuer Standard für Linux-Distributionen
| | | Konfiguration || [[Systemd/Konfiguration]] |
| * Administration von Servern
| | |} |
| | |
| Wenn Sie die Werkzeuge und Daemons, aus denen systemd besteht, kennenlernen und verwenden, werden Sie die Leistungsfähigkeit, Flexibilität und Fähigkeiten, die es bietet, besser zu schätzen wissen oder zumindest ihre Arbeit mit minimalem Aufwand erledigen können.
| |
| | |
| In diesem Leitfaden besprechen wir den Befehl systemctl, bei dem es sich um das zentrale Verwaltungswerkzeug zur Steuerung des Init-Systems handelt.
| |
| * Wir behandeln die Verwaltung von Diensten, die Überprüfung des Status, die Änderung von Systemzuständen und die Arbeit im Umgang mit den Konfigurationsdateien.
| |
| * Bitte beachten Sie, dass systemd zwar zum Standard-Init-System für viele Linux-Distributionen geworden ist, aber nicht durchgängig in allen Distributionen implementiert ist.
| |
| * Wenn Ihr Terminal beim Durcharbeiten dieses Tutorials die Fehlermeldung bash: systemctl is not installed ausgibt, ist es wahrscheinlich, dass auf Ihrem Rechner ein anderes Init-System installiert ist.
| |
| | |
| === Der Daemon systemd ===
| |
| ; Das Programm <tt>systemd</tt> trägt die Prozess-ID 1
| |
| * Hiermit wird das System in der erforderlichen Form initialisiert. <tt>systemd</tt> wird direkt vom Kernel gestartet und widersteht dem Signal 9, das in der Regel Prozesse beendet.
| |
| * Alle anderen Programme werden entweder direkt von systemd oder von einem seiner untergeordneten Prozesse gestartet.
| |
| | |
| ; Systemd ersetzt den System V init-Daemon.
| |
| * <tt>systemd</tt> ist mit System V init uneingeschränkt kompatibel (init-Skripten werden unterstützt).
| |
| * Einer der wichtigsten Vorteile von systemd ist die deutliche Beschleunigung des Bootvorgangs, da die Dienststarts konsequent parallel ausgeführt werden.
| |
| * Darüber hinaus startet systemd einen Dienst nur dann, wenn er tatsächlich benötigt wird.
| |
| * Deamons werden nicht in jedem Fall beim Booten gestartet, sondern erst dann, wenn sie erstmalig benötigt werden.
| |
| * systemd unterstützt außerdem Kernel-Steuergruppen (cgroups), das Erstellen von Snapshots, das Wiederherstellen des Systemstatus und vieles mehr.
| |
| * Weitere Informationen finden Sie in http://www.freedesktop.org/wiki/Software/systemd/.
| |
| | |
| === Konzept ===
| |
| ===Grundlagen===
| |
| systemd ist ein System- und Sitzungsmanager für Linux und ist mit System V- und LSB-init-Skripts kompatibel.
| |
| | |
| ; Die wichtigsten Funktionen
| |
| * Konsequente Parallelisierung
| |
| * Starten von Diensten per Socket- und D-Bus-Aktivierung
| |
| * Starten der Daemons bei Bedarf
| |
| * Verfolgen der Prozesse, die Linux-cgroups nutzen
| |
| * Unterstützung für das Erstellen von Snapshots und Wiederherstellen des Systemstatus
| |
| * Einhängepunkte und Automount-Punkte
| |
| * Ausgereifte Dienststeuerlogik auf der Basis der Transaktionsabhängigkeiten
| |
| | |
| ===Unit-Datei===
| |
| Eine Unit-Konfigurationsdatei enthält Informationen zu einem Dienst, Socket, Gerät, Einhängepunkt, Automount-Punkt, einer Auslagerungsdatei oder Partition, einem Startziel, einem überwachten Dateisystempfad, einem von systemd gesteuerten und überwachten Zeitgeber, einem Snapshot eines temporären Systemstatus, einem Ressourcenverwaltungs-Slice oder einer Gruppe extern erstellter Prozesse.
| |
| | |
| ; „Unit-Datei“ ist in systemd ein generischer Term für Folgendes
| |
| * Dienst. Informationen zu einem Prozess (z. B. Ausführung eines Daemon); Datei endet auf .service Ziele. Fassen Units zu Gruppen zusammen bzw. fungieren als Synchronisierungspunkte beim Starten; Datei endet auf .target Sockets.
| |
| * Informationen zu einem IPC- oder Netzwerk-Socket oder einem Dateisystem-FIFO, für die socketbasierte Aktivierung (wie <tt>inetd</tt>); Datei endet auf .socket Pfad.
| |
| * Dient als Auslöser von anderen Units (z. B. Ausführen eines Dienstes, wenn Dateien geändert werden); Datei endet auf .path Zeitgeber.
| |
| * Informationen zu einem gesteuerten Zeitgeber für die zeitgeberbasierte Aktivierung; Datei endet auf .timer Einhängepunkt.
| |
| * In der Regel automatisch durch den fstab-Generator erzeugt; Datei endet auf .mount Automount-Punkt.
| |
| * Informationen zu einem Dateisystem-Automount-Punkt; Datei endet auf .automount Swap.
| |
| * Informationen zu einem Auslagerungsgerät oder einer Auslagerungsdatei für das Arbeitsspeicher-Paging; Datei endet auf .swap Gerät.
| |
| * Informationen zu einer Geräte-Unit in der Geräte-Baumstruktur sysfs/udev(7); Datei endet auf .device Bereich/Slice. Konzept für die hierarchische Verwaltung von Ressourcen einer Prozessgruppe; Datei endet auf .scope/.slice
| |
| | |
| Weitere Informationen zu systemd.unit finden Sie unter http://www.freedesktop.org/software/systemd/man/systemd.unit.html.
| |
| | |
| == Installation ==
| |
| [[Systemd/Installation]] | |
| | |
| == Syntax ==
| |
| [[Systemd/Syntax]] | |
| | |
| == Anwendung ==
| |
| [[Systemd/Anwendung]] | |
| | |
| == Konfiguration ==
| |
| [[Systemd/Konfiguration]] | |
|
| |
|
| <noinclude> | | <noinclude> |
|
| |
| == Anhang == | | == Anhang == |
| === Siehe auch === | | === Siehe auch === |
Zeile 81: |
Zeile 20: |
| ==== Dokumentation ==== | | ==== Dokumentation ==== |
|
| |
|
| ===== Man-Pages ===== | | ===== Man-Page ===== |
| ===== Info-Pages ===== | | ===== Info-Pages ===== |
| ==== Links ==== | | ==== Links ==== |
| ===== Projekt ===== | | ===== Projekt ===== |
| ===== Weblinks ===== | | ===== Weblinks ===== |
| </noinclude>
| |
|
| |
|
| = TMP =
| | [[Kategorie:systemd]] |
| {{DISPLAYTITLE:systemd}}
| |
|
| |
|
| == Anpassen von systemd ==
| | </noinclude> |
| ; Warnung
| |
| : Vermeiden der Überschreibung von Anpassungen
| |
| : Passen Sie systemd stets in <tt>/etc/systemd/</tt> an, ''nicht'' in <tt>/usr/lib/systemd/</tt>.
| |
| :* Ansonsten werden Ihre Änderungen bei der nächsten Aktualisierung von systemd überschrieben.
| |
| | |
| ===Anpassen von Unit-Dateien===
| |
| Die systemd-Unit-Dateien befinden sich in<tt>/usr/lib/systemd/system</tt>.
| |
| * Zum Anpassen fahren Sie wie folgt fort: # Kopieren Sie die zu bearbeitenden Dateien aus <tt>/usr/lib/systemd/system</tt> in <tt>/etc/systemd/system</tt>.
| |
| * Behalten Sie die ursprünglichen Dateinamen bei.
| |
| #Bearbeiten Sie die Kopien in <tt>/etc/systemd/system</tt>.
| |
| #Mit dem Kommando <tt>systemd-delta</tt> erhalten Sie einen Überblick über Ihre Konfigurationsänderungen.
| |
| * Hiermit werden Konfigurationsdateien verglichen und ermittelt, die andere Konfigurationsdateien überschreiben.
| |
| * Weitere Informationen finden Sie auf der man-Seite zu <tt>systemd-delta</tt>.
| |
| | |
| Die geänderten Dateien in <tt>/etc/systemd</tt> haben Vorrang vor den Originaldateien in <tt>/usr/lib/systemd/system</tt>, sofern die Dateinamen identisch sind.
| |
| | |
| ====Konvertieren von xinetd-Diensten in systemd====
| |
| Seit der Version SUSE Linux Enterprise Desktop 15 wurde die <tt>xinetd</tt>-Infrastruktur entfernt.
| |
| * In diesem Abschnitt wird beschrieben, wie Sie vorhandene benutzerdefinierte <tt>xinetd</tt>-Dienstdateien in <tt>systemd</tt>-Sockets konvertieren.
| |
| | |
| Für jede <tt>xinetd</tt>-Dienstdatei benötigen Sie mindestens zwei <tt>systemd</tt>-Unit-Dateien: die Socket-Datei (<tt> *.socket </tt>) und eine zugehörige Dienstdatei (<tt>*.service</tt>).
| |
| * Die Socket-Datei weist <tt>systemd</tt> an, welcher Socket erstellt werden soll, und die Dienstdatei weist <tt>systemd</tt> an, welche ausführbare Datei gestartet werden soll.
| |
| | |
| Betrachten Sie das folgende Beispiel für eine <tt>xinetd</tt>-Dienstdatei:
| |
| # '''cat /etc/xinetd.d/example'''
| |
| service example
| |
| {
| |
| socket_type = stream
| |
| protocol = tcp
| |
| port = 10085
| |
| wait = no
| |
| user = user
| |
| group = users
| |
| groups = yes
| |
| server = /usr/libexec/example/exampled
| |
| server_args = -auth=bsdtcp exampledump
| |
| disable = no
| |
| }
| |
| | |
| Zum Konvertieren in <tt>systemd</tt> benötigen Sie die folgenden beiden Dateien:
| |
| | |
| # '''cat /usr/lib/systemd/system/example.socket'''
| |
| [Socket]
| |
| ListenStream=0.0.0.0:10085
| |
| Accept=false
| |
| | |
| [Install]
| |
| WantedBy=sockets.target
| |
| root # cat /usr/lib/systemd/system/example.service
| |
| [Unit]
| |
| Description=example
| |
| | |
| [Service]
| |
| ExecStart=/usr/libexec/example/exampled -auth=bsdtcp exampledump
| |
| User=user
| |
| Group=users
| |
| StandardInput=socket
| |
| | |
| Eine vollständige Liste der Socket- und Dienstdateioptionen für <tt>systemd</tt> finden Sie auf den man-Seiten zu systemd.socket und systemd.service (<tt>man 5 systemd.socket</tt>, <tt>man 5 systemd.service</tt>).
| |
| | |
| ===Erstellen von „Drop-in-Dateien“===
| |
| Wenn eine Konfigurationsdatei nur um wenige Zeilen ergänzt oder nur ein kleiner Teil daraus geändert werden soll, können Sie sogenannte „Drop-in-Dateien“ verwenden.
| |
| * Mit den Drop-in-Dateien erweitern Sie die Konfiguration von Unit-Dateien, ohne die Unit-Dateien selbst bearbeiten oder überschreiben zu müssen.
| |
| | |
| Um beispielsweise einen einzigen Wert für den Dienst ''foobar'' in <tt>/usr/lib/systemd/system/ ''foobar.service''</tt> zu ändern, gehen Sie wie folgt vor: # Erstellen Sie ein Verzeichnis mit dem Namen <tt>/etc/systemd/system/''FOOBAR''.service.d/</tt>.
| |
| | |
| Beachten Sie das Suffix <tt>.d</tt>.
| |
| * Ansonsten muss der Name des Verzeichnisses mit dem Namen des Dienstes übereinstimmen, der mit der Drop-in-Datei gepatcht werden soll.
| |
| #Erstellen Sie in diesem Verzeichnis eine Datei mit dem Namen <tt>''whatevermodification''.conf</tt>.
| |
| | |
| Diese Datei darf nur eine Zeile mit dem zu ändernden Wert enthalten.
| |
| # Speichern Sie Ihre Änderungen in die Datei.
| |
| * Die Datei wird als Erweiterung der Originaldatei verwendet.
| |
| | |
| ===Erstellen von benutzerdefinierten Zielen===
| |
| Auf SUSE-Systemen mit System V-init wird Runlevel 4 nicht genutzt, so dass die Administratoren eine eigene Runlevel-Konfiguration erstellen können.
| |
| * Mit systemd können Sie beliebig viele benutzerdefinierte Ziele erstellen.
| |
| * Zum Einstieg sollten Sie ein vorhandenes Ziel anpassen, beispielsweise <tt>graphical.target</tt>. # Kopieren Sie die Konfigurationsdatei <tt>/usr/lib/systemd/system/graphical.target</tt> in <tt>/etc/systemd/system/''MEIN_ZIEL''.target</tt> und passen Sie sie nach Bedarf an.
| |
| # Die im vorangegangenen Schritt kopierte Konfigurationsdatei enthält bereits die erforderlichen („harten“) Abhängigkeiten für das Ziel.
| |
| * Um auch die erwünschten („weichen“) Abhängigkeiten abzudecken, erstellen Sie ein Verzeichnis mit dem Namen <tt>/etc/systemd/system/''MEIN_ZIEL''.target.wants</tt>.
| |
| #Legen Sie für jeden erwünschten Dienst einen symbolischen Link von <tt>/usr/lib/systemd/system</tt> in <tt>/etc/systemd/system/''MEIN_ZIEL''.target.wants</tt> an.
| |
| #Sobald Sie alle Einstellungen für das Ziel festgelegt haben, laden Sie die systemd-Konfiguration neu.
| |
| * Damit wird das neue Ziel verfügbar:
| |
| | |
| # '''systemctl daemon-reload'''
| |
| | |
| == Erweiterte Nutzung ==
| |
| In den nachfolgenden Abschnitten finden Sie weiterführende Themen für Systemadministratoren.
| |
| * Eine noch eingehendere Dokumentation finden Sie in der Serie von Lennart Pöttering zu systemd für Administratoren unter http://0pointer.de/blog/projects.
| |
| | |
| ===Bereinigen von temporären Verzeichnissen===
| |
| <tt>systemd</tt> unterstützt das regelmäßige Bereinigen der temporären Verzeichnisse.
| |
| * Die Konfiguration aus der bisherigen Systemversion wird automatisch migriert und ist aktiv. <tt>tmpfiles.d</tt> (verwaltet temporäre Dateien) liest die Konfiguration aus den Dateien <tt>/etc/tmpfiles.d/*.conf</tt>, <tt>/run/tmpfiles.d/*.conf</tt> und <tt>/usr/lib/tmpfiles.d/*.conf</tt> aus.
| |
| * Die Konfiguration in <tt>/etc/tmpfiles.d/*.conf</tt> hat Vorrang vor ähnlichen Konfigurationen in den anderen beiden Verzeichnissen. (In <tt>/usr/lib/tmpfiles.d/*.conf</tt> speichern die Pakete die Konfigurationsdateien.)
| |
| | |
| Im Konfigurationsformat ist eine Zeile pro Pfad vorgeschrieben, wobei diese Zeile die Aktion und den Pfad enthalten muss und optional Felder für Modus, Eigentümer, Alter und Argument (je nach Aktion) enthalten kann.
| |
| * Im folgenden Beispiel wird die Verknüpfung der X11-Sperrdateien aufgehoben:
| |
| | |
| Type Path Mode UID GID Age Argument
| |
| r /tmp/.X[0-9]*-lock
| |
| | |
| So rufen Sie den Status aus dem tmpfile-Zeitgeber ab:
| |
| | |
| # '''systemctl status systemd-tmpfiles-clean.timer'''
| |
| systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
| |
| Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static)
| |
| Active: active (waiting) since Tue 2018-04-09 15:30:36 CEST; 1 weeks 6 days ago
| |
| Docs: man:tmpfiles.d(5)
| |
| man:systemd-tmpfiles(8)
| |
| | |
| Apr 09 15:30:36 jupiter systemd[1]: Starting Daily Cleanup of Temporary Directories.
| |
| Apr 09 15:30:36 jupiter systemd[1]: Started Daily Cleanup of Temporary Directories.
| |
| | |
| Weitere Informationen zum Arbeiten mit temporären Dateien finden Sie unter <tt>man 5 tmpfiles.d</tt>.
| |
| | |
| ===Systemprotokoll===
| |
| In wird erläutert, wie Sie Protokollmeldungen für einen bestimmten Dienst anzeigen.
| |
| * Die Anzeige von Protokollmeldungen ist allerdings nicht auf Dienstprotokolle beschränkt.
| |
| * Sie können auch auf das gesamte von <tt>systemd</tt> geschriebene Protokoll (das sogenannte „Journal“) zugreifen und Abfragen darauf ausführen.
| |
| * Mit dem Befehl <tt>journalctl</tt> zeigen Sie das gesamte Protokoll an, beginnend mit den ältesten Einträgen.
| |
| * Informationen zu weiteren Optionen, beispielsweise zum Anwenden von Filtern oder zum Ändern des Ausgabeformats, finden Sie unter <tt>man 1 journalctl</tt>.
| |
| | |
| ===Aufnahmen ===
| |
| Mit dem Subkommando <tt>isolate</tt> können Sie den aktuellen Status von <tt>systemd</tt> als benannten Snapshot speichern und später wiederherstellen.
| |
| * Dies ist beim Testen von Diensten oder benutzerdefinierten Zielen hilfreich, weil Sie jederzeit zu einem definierten Status zurückkehren können.
| |
| * Ein Snapshot ist nur in der aktuellen Sitzung verfügbar; beim Neubooten wird er automatisch gelöscht.
| |
| * Der Snapshot-Name muss auf <tt>.snapshot</tt> enden.
| |
| | |
| Erstellen eines Snapshots
| |
| | |
| # '''systemctl snapshot ''MY_SNAPSHOT''.snapshot'''
| |
| | |
| Löschen eines Snapshots
| |
| | |
| # '''systemctl delete ''MY_SNAPSHOT''.snapshot'''
| |
| | |
| Anzeigen eines Snapshots
| |
| | |
| # '''systemctl show ''MY_SNAPSHOT''.snapshot'''
| |
| | |
| Aktivieren eines Snapshots
| |
| | |
| # '''systemctl isolate ''MY_SNAPSHOT''.snapshot'''
| |
| | |
| ===Laden der Kernelmodule===
| |
| Mit <tt>systemd</tt> können Kernel-Module automatisch zum Bootzeitpunkt geladen werden, und zwar über die Konfigurationsdatei in <tt>/etc/modules-load.d</tt>.
| |
| * Die Datei sollte den Namen ''MODUL''.conf haben und den folgenden Inhalt aufweisen:
| |
| | |
| # load module ''MODULE'' at boot time
| |
| ''MODULE''
| |
| | |
| Falls ein Paket eine Konfigurationsdatei zum Laden eines Kernel-Moduls installiert, wird diese Datei unter <tt>/usr/lib/modules-load.d</tt> installiert.
| |
| * Wenn zwei Konfigurationsdateien mit demselben Namen vorhanden sind, hat die Datei unter <tt>/etc/modules-load.d</tt> Vorrang.
| |
| | |
| Weitere Informationen finden Sie auf der man-Seite <tt>modules-load.d(5)</tt>.
| |
| | |
| ===Ausführen von Aktionen vor dem Laden eines Dienstes===
| |
| Bei System V mussten init-Aktionen, die vor dem Laden eines Diensts ausgeführt werden müssen, in <tt>/etc/init.d/before.local</tt> festgelegt werden.
| |
| * Dieses Verfahren wird in systemd nicht mehr unterstützt.
| |
| * Wenn Aktionen vor dem Starten von Diensten ausgeführt werden müssen, gehen Sie wie folgt vor:
| |
| | |
| Laden der Kernelmodule
| |
| | |
| Erstellen Sie eine Drop-in-Datei im Verzeichnis <tt>/etc/modules-load.d</tt> (Syntax siehe <tt>man modules-load.d</tt>).
| |
| | |
| Erstellen von Dateien oder Verzeichnissen, Bereinigen von Verzeichnissen, Ändern des Eigentümers
| |
| | |
| Erstellen Sie eine Drop-in-Datei in <tt>/etc/tmpfiles.d</tt> (Syntax siehe <tt>man tmpfiles.d</tt>).
| |
| | |
| Weitere Aufgaben
| |
| | |
| Erstellen Sie eine Systemdienstdatei (beispielsweise <tt>/etc/systemd/system/before.service</tt>) anhand der folgenden Schablone:
| |
| | |
| [Unit]
| |
| Before=''NAME OF THE SERVICE YOU WANT THIS SERVICE TO BE STARTED BEFORE''
| |
| [Service]
| |
| Type=oneshot
| |
| RemainAfterExit=true
| |
| ExecStart=''YOUR_COMMAND''
| |
| # beware, executable is run directly, not through a shell, check the man pages
| |
| # systemd.service and systemd.unit for full syntax
| |
| [Install]
| |
| # target in which to start the service
| |
| WantedBy=multi-user.target
| |
| #WantedBy=graphical.target
| |
| | |
| Sobald die Dienstdatei erstellt ist, führen Sie die folgenden Kommandos aus (als <tt>root</tt>):
| |
| | |
| # '''systemctl daemon-reload'''
| |
| # '''systemctl enable before'''
| |
| | |
| Bei jedem Bearbeiten der Dienstdatei müssen Sie Folgendes ausführen:
| |
| | |
| # '''systemctl daemon-reload'''
| |
| | |
| ===Kernel-Steuergruppen (cgroups)===
| |
| Auf einem traditionellen System-V-init-System kann ein Prozess nicht immer eindeutig dem Dienst zugeordnet werden, durch den er erzeugt wurde.
| |
| * Einige Dienste (z. B. Apache) erzeugen zahlreiche externe Prozesse (z. B. CGI- oder Java-Prozesse), die wiederum weitere Prozesse erzeugen.
| |
| * Eindeutige Zuweisungen sind damit schwierig oder völlig unmöglich.
| |
| * Wenn ein Dienst nicht ordnungsgemäß beendet wird, bleiben zudem ggf.
| |
| * einige untergeordnete Dienste weiterhin aktiv.
| |
| | |
| Bei systemd wird jeder Dienst in eine eigene cgroup aufgenommen, womit dieses Problem gelöst ist.
| |
| * cgroups sind eine Kernel-Funktion, mit der die Prozesse mit allen ihren untergeordneten Prozessen in hierarchisch strukturierten Gruppen zusammengefasst werden.
| |
| * Die cgroups werden dabei nach dem jeweiligen Dienst benannt.
| |
| * Da ein nicht privilegierter Dienst seine cgroup nicht „verlassen“ darf, ist es damit möglich, alle von einem Dienst erzeugten Prozesse mit dem Namen dieses Dienstes zu versehen.
| |
| | |
| Mit dem Kommando <tt>systemd-cgls</tt> erhalten Sie eine Liste aller Prozesse, die zu einem Dienst gehören. (Gekürztes) Beispiel für die Ausgabe:
| |
| | |
| ======Auflisten aller Prozesse, die zu einem Dienst gehören======
| |
| root # systemd-cgls --no-pager
| |
| ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
| |
| ├─user.slice
| |
| │ └─user-1000.slice
| |
| │ ├─session-102.scope
| |
| │ │ ├─12426 gdm-session-worker [pam/gdm-password]
| |
| │ │ ├─15831 gdm-session-worker [pam/gdm-password]
| |
| │ │ ├─15839 gdm-session-worker [pam/gdm-password]
| |
| │ │ ├─15858 /usr/lib/gnome-terminal-server
| |
| [...]
| |
| └─system.slice
| |
| ├─systemd-hostnamed.service
| |
| │ └─17616 /usr/lib/systemd/systemd-hostnamed
| |
| ├─cron.service
| |
| │ └─1689 /usr/sbin/cron -n
| |
| ├─postfix.service
| |
| │ ├─ 1676 /usr/lib/postfix/master -w
| |
| │ ├─ 1679 qmgr -l -t fifo -u
| |
| │ └─15590 pickup -l -t fifo -u
| |
| ├─sshd.service
| |
| │ └─1436 /usr/sbin/sshd -D
| |
| | |
| [...]
| |
| | |
| Weitere Informationen zu cpgroups finden Sie in [Fixme]
| |
| | |
| ===Beenden von Diensten (Senden von Signalen) ===
| |
| Wie in erläutert, kann ein Prozess in einem System-V-init-System nicht immer eindeutig seinem übergeordneten Dienstprozess zugeordnet werden.
| |
| * Das erschwert das Beenden eines Dienstes und seiner untergeordneten Dienste.
| |
| * Untergeordnete Prozesse, die nicht ordnungsgemäß beendet wurden, bleiben als "Zombie-Prozess" zurück.
| |
| | |
| Durch das Konzept von systemd, mit dem jeder Dienst in einer eigenen cgroup abgegrenzt wird, können alle untergeordneten Prozesse eines Dienstes eindeutig erkannt werden, so dass Sie ein Signal zu diesen Prozessen senden können.
| |
| * Mit Use <tt>systemctl kill</tt> senden Sie die Signale an die Dienste.
| |
| * Eine Liste der verfügbaren Signale finden Sie in <tt>man 7 signals</tt>.
| |
| | |
| Senden von <tt>SIGTERM</tt> an einen Dienst
| |
| | |
| <tt>SIGTERM</tt> ist das standardmäßig gesendete Signal.
| |
| | |
| # '''systemctl kill ''MY_SERVICE'''''
| |
| | |
| Senden von ''SIGNAL'' an einen Dienst
| |
| | |
| Mit der Option <tt>-s</tt> legen Sie das zu sendende Signal fest.
| |
| | |
| # '''systemctl kill -s ''SIGNAL'' ''MY_SERVICE'''''
| |
| | |
| '''Auswählen von Prozessen'''
| |
| | |
| Standardmäßig sendet das Kommando <tt>kill</tt> das Signal an <tt>alle</tt> Prozesse der angegebenen cgroup.
| |
| * Sie können dies jedoch auf den Prozess <tt>control</tt> oder <tt>main</tt> beschränken.
| |
| * Damit können Sie beispielsweise das Neuladen der Konfiguration eines Dienstes mit dem Signal <tt>SIGHUP</tt> erzwingen:
| |
| | |
| # '''systemctl kill -s SIGHUP --kill-who=main ''MY_SERVICE'''''
| |
| | |
| Warnung: Beenden oder Neustarten des D-BUS-Dienstes wird nicht unterstützt
| |
| Der D-Bus-Dienst fungiert als Meldungsbus für die Kommunikation zwischen den systemd-Clients und dem systemd-Manager, der als PID 1 ausgeführt wird. <tt>dbus</tt> ist zwar ein eigenständiger Daemon, bildet jedoch auch einen wesentlichen Bestandteil der Initialisierungsinfrastruktur.
| |
| | |
| Das Beenden von <tt>dbus</tt> oder das Neustarten im laufenden System entspricht dem Versuch, PID 1 zu beenden oder neu zu starten.
| |
| * Hiermit wird die systemd-Client/Server-Kommunikation unterbrochen, sodass die meisten systemd-Funktionen unbrauchbar werden.
| |
| | |
| Das Beenden oder Neustarten von <tt>dbus</tt> wird daher weder empfohlen noch unterstützt.
| |
| | |
| ===Fehlersuche für Dienste===
| |
| Standardmäßig ist die Ausgabe von systemd auf ein Minimum beschränkt.
| |
| * Wenn ein Dienst ordnungsgemäß gestartet wurde, erfolgt keine Ausgabe.
| |
| * Bei einem Fehler wird eine kurze Fehlermeldung angezeigt.
| |
| * Mit <tt>systemctl status</tt> können Sie jedoch die Fehlersuche für den Start und die Ausführung eines Dienstes vornehmen.
| |
| | |
| systemd umfasst einen Protokollierungsmechanismus („Journal“), mit dem die Systemmeldungen protokolliert werden.
| |
| * Auf diese Weise können Sie die Dienstmeldungen zusammen mit den Statusmeldungen abrufen.
| |
| * Das Kommando <tt>status</tt> hat eine ähnliche Funktion wie <tt>tail</tt> und kann zudem die Protokollmeldungen in verschiedenen Formaten anzeigen, ist also ein wirksames Hilfsmittel für die Fehlersuche.
| |
| | |
| Anzeigen von Fehlern beim Starten von Diensten
| |
| | |
| Wenn ein Dienst nicht gestartet wird, erhalten Sie mit <tt>systemctl status ''MEIN_DIENST''</tt> eine ausführliche Fehlermeldung:
| |
| | |
| # '''systemctl start apache2'''
| |
| Job failed.
| |
| * See system journal and 'systemctl status' for details.
| |
| root # systemctl status apache2
| |
| Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled)
| |
| Active: failed (Result: exit-code) since Mon, 04 Apr 2018 16:52:26 +0200; 29s ago
| |
| Process: 3088 ExecStart=/usr/sbin/start_apache2 -D SYSTEMD -k start (code=exited, status=1/FAILURE)
| |
| CGroup: name=systemd:/system/apache2.service
| |
| | |
| Apr 04 16:52:26 g144 start_apache2[3088]: httpd2-prefork: Syntax error on line
| |
| 205 of /etc/apache2/httpd.conf: Syntax error on li...alHost>
| |
| | |
| Anzeigen der letzten ''n'' Dienstmeldungen
| |
| | |
| Standardmäßig zeigt das Subkommando <tt>status</tt> die letzten zehn Meldungen an, die ein Dienst ausgegeben hat.
| |
| * Mit dem Parameter <tt>--lines=''n''</tt> legen Sie eine andere Anzahl fest:
| |
| | |
| # '''systemctl status chronyd'''
| |
| # '''systemctl --lines=20 status chronyd'''
| |
| | |
| Anzeigen von Dienstmeldungen im Anhängemodus
| |
| | |
| Mit der Option „--follow“ erhalten Sie einen <tt>Live-Stream</tt> mit Dienstmeldungen; diese Option entspricht <tt>tail -f</tt>:
| |
| # '''systemctl --follow status chronyd'''
| |
| | |
| Ausgabeformat der Meldungen
| |
| | |
| Mit dem Parameter <tt>--output=''mode''</tt> legen Sie das Ausgabeformat für die Dienstmeldungen fest.
| |
| * Die wichtigsten Modi sind:
| |
| | |
| <tt>short</tt>
| |
| | |
| Das Standardformat.
| |
| * Zeigt die Protokollmeldungen mit einem Zeitstempel in Klartext an.
| |
| | |
| <tt>verbose</tt>
| |
| | |
| Vollständige Ausgabe mit sämtlichen Feldern.
| |
| | |
| <tt>cat</tt>
| |
| | |
| Kurze Ausgabe ohne Zeitstempel.
| |
| | |
| [[Kategorie:Systemd]]
| |
| | |
| | |
| {{DEFAULTSORT:systemd}}
| |