Systemd: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
KKeine Bearbeitungszusammenfassung
K (systemd-boot)
 
(11 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{SEITENTITEL:systemd}}
{{SEITENTITEL:systemd}}
systemd ist der Init-Prozess von Arch Linux. Es startet, überwacht, und beendet alle weiteren ''Services'', ist für das mitloggen von Servicerückmeldungen und Benutzerinteraktionen zuständig. Zudem verwaltet systemd die [[Mounten|Mounts]], und beherrscht die Abhängigkeitsauflösung beim Starten von zusätzlichen Services.
systemd ist der Init-Prozess von Arch Linux. Dieser startet, überwacht, und beendet alle weiteren ''Services'', und ist für das Loggen von Servicerückmeldungen und Benutzerinteraktionen zuständig. Zudem verwaltet systemd die [[Mounten|mounts]], und beherrscht die Abhängigkeitsauflösung beim Starten von zusätzlichen Services. Zusätzlich wird mit [[Systemd-boot|systemd-boot]] ein Bootloader mitgeliefert.


== Installation ==
== Installation ==
Zeile 8: Zeile 8:
Über mehrere Konfigurationsdateien in {{ic|/etc/systemd}} können die Eigenschaften von systemd vorgegeben werden. Über gleichnamige [[Manpages]] bekommt man ausführliche Informationen zu den einzelnen Optionen in den jeweiligen Konfigurationsdateien.
Über mehrere Konfigurationsdateien in {{ic|/etc/systemd}} können die Eigenschaften von systemd vorgegeben werden. Über gleichnamige [[Manpages]] bekommt man ausführliche Informationen zu den einzelnen Optionen in den jeweiligen Konfigurationsdateien.


In {{ic|/etc/systemd/system}} kann man eigene Service-Dateien ablegen. Dies sind Konfigurationsdateien im INI-Format, anhand derer von systemd verwaltbare Services erstellt werden können.
In {{ic|/etc/systemd/system}} kann man [[Systemd/Eigener_Service|eigene Service-Dateien]] ablegen. Dies sind Konfigurationsdateien im INI-Format, anhand derer von systemd verwaltbare Services erstellt werden können.


=== Systemkonfiguration ===
=== Systemkonfiguration ===
Zeile 45: Zeile 45:
Weitergehende Informationen zur Konfiguration enthält der Abschnitt zur [[Anleitung_f%C3%BCr_Einsteiger#Systemkonfiguration|Systemkonfiguration]] der Einsteigeranleitung.
Weitergehende Informationen zur Konfiguration enthält der Abschnitt zur [[Anleitung_f%C3%BCr_Einsteiger#Systemkonfiguration|Systemkonfiguration]] der Einsteigeranleitung.


== Wichtige systemd-Programme ==
== systemctl ==
Das Haupt-Programm systemds ist {{ic|systemctl}}. Hierüber werden Services gestartet, gestoppt, deren Status geprüft, sie aktiviert oder deaktiviert, sowie Übersichtslisten über verschiedene Service-Gruppen angezeigt.
 
Des weiteres wird {{ic|journalctl}} verwendet, um alle von systemd angelegten Logeinträge zu betrachten, zu filtern, zu exportieren und zu prüfen.
 
=== systemctl ===
Die vier wichtigsten Parameter für {{ic|systemctl}} sind {{ic|start}}, {{ic|stop}}, {{ic|enable}} und {{ic|disable}}.
Die vier wichtigsten Parameter für {{ic|systemctl}} sind {{ic|start}}, {{ic|stop}}, {{ic|enable}} und {{ic|disable}}.


Zeile 58: Zeile 53:
** '''enable servicename''' aktiviert den Service für den automatischen Start
** '''enable servicename''' aktiviert den Service für den automatischen Start
** '''disable servicename''' deaktiviert den Autostart des Services
** '''disable servicename''' deaktiviert den Autostart des Services
Die zusätzliche Option {{ic|--now}} schließt bei einem Kommandos {{ic|enable}} den {{ic|start}} und bei {{ic|disable}} den {{ic|stop}} mit ein, d. h. nach einem {{ic|enable}} wird der Service auch sofort gestartet bzw. nach einem {{ic|disable}} sofort gestoppt sofern der {{ic|enable}} bzw. {{ic|disable}} erfolgreich war.


Über {{ic|status}} kann man sich den Service-Status, sowie generelle Informationen über den betreffenden Service anzeigen lassen.
Über {{ic|status}} kann man sich den Service-Status, sowie generelle Informationen über den betreffenden Service anzeigen lassen.
Zeile 69: Zeile 66:
           └─202 /usr/bin/sshd -D}}
           └─202 /usr/bin/sshd -D}}


Hier wird am Beispiel des SSH-Services der aktuelle Status, sowie Systembezogene Informationen angezeigt. Der Service wurde vor zwei Tagen geladen, dazu wurde die Service-Datei {{ic|/usr/lib/systemd/system/sshd.service}}, und der Service ist momentan aktiv und funktioniert. Zudem wird er automatisch gestartet ({{ic|enabled}} in der Zeile „Loaded“).
Hier wird am Beispiel des SSH-Services der aktuelle Status, sowie systembezogene Informationen angezeigt. Der Service wurde vor zwei Tagen geladen, dazu wurde die Service-Datei {{ic|/usr/lib/systemd/system/sshd.service}}, und der Service ist momentan aktiv und funktioniert. Zudem wird er automatisch gestartet ({{ic|enabled}} in der Zeile „Loaded“).


{{hc|1=systemctl status sshd|2=
{{hc|1=systemctl status sshd|2=
Zeile 109: Zeile 106:
Auf {{ic|/dev/sda2}} wird der [[Swap]] abgelegt, dieser wird von systemd verwaltet.
Auf {{ic|/dev/sda2}} wird der [[Swap]] abgelegt, dieser wird von systemd verwaltet.


==== Systemverwaltung mit systemctl ====
=== Systemverwaltung mit systemctl ===
Neben der Serviceverwaltung dient systemctl auch zur Systemverwaltung.
Neben der Serviceverwaltung dient systemctl auch zur Systemverwaltung.


Zeile 120: Zeile 117:
Je nach Konfiguration können diese Befehle auch mit Useraccounts ausgeführt werden, und bedürfen keinen root-Rechten.
Je nach Konfiguration können diese Befehle auch mit Useraccounts ausgeführt werden, und bedürfen keinen root-Rechten.


=== journalctl ===
== journalctl ==
Das Programm {{ic|journalctl}} dient als Schnittstelle zu {{ic|journald}}, systemds Logeintragsservice. Je nach Konfiguration kann das Journal nur im Arbeitsspeicher abgelegt werden, auf ein entferntes Gerät geschrieben werden, ganz regulär in Dateien gesichert werden, oder auch signiert, und so gegen Manipulation geschützt werden.
Das Programm {{ic|journalctl}} dient als Schnittstelle zu {{ic|journald}}, systemds Logeintragsservice. Je nach Konfiguration kann das Journal nur im Arbeitsspeicher abgelegt werden, auf ein entferntes Gerät geschrieben werden, ganz regulär in Dateien gesichert werden, oder auch signiert, und so gegen Manipulation geschützt werden.


Zeile 136: Zeile 133:
  journalctl --boot 8b3e482a56c04128902b3bc627221865
  journalctl --boot 8b3e482a56c04128902b3bc627221865


Es werden dann alle diesen Zeitraum betreffenden Meldungen angezeigt. {{ic|--boot}} kann in Mombination mit allen Funktionen von journalctl verwendet werden.
Es werden dann alle diesen Zeitraum betreffenden Meldungen angezeigt. {{ic|--boot}} kann in Kombination mit allen Funktionen von journalctl verwendet werden.


  journalctl --boot a39ac4caa1a84de9be632afe48d79021 --unit ntpd --output json
  journalctl --boot a39ac4caa1a84de9be632afe48d79021 --unit ntpd --output json


Hiermit werden alle Logeinträge bezüglich des Services {{ic|ntpd}} für den Beispielzeitraum vom 02. Juni bis zum 03. Juni als JSON formatiert ausgegeben. Mit der kombination verschiedener Optionen kann man sich also seine „Wunschformatierung“ nach belieben selbst erstellen.
Hiermit werden alle Logeinträge bezüglich des Services {{ic|ntpd}} für den Beispielzeitraum vom 02. Juni bis zum 03. Juni als JSON formatiert ausgegeben. Mit der Kombination verschiedener Optionen kann man sich also seine „Wunschformatierung“ nach belieben selbst erstellen.
 
== Weitere systemd-Programme und -Services ==
=== systemd-timesyncd ===
Dieser Service ermöglicht es per [[NTP]] die Zeit mit einem Zeitserver zu synchronisieren. Damit {{ic|systemd-timesyncd}} automatisch gestartet wird, muss der Service entsprechend konfiguriert werden.
 
systemctl enable systemd-timesyncd # Für den automatischen Start vormerken …
systemctl start systemd-timesyncd # … und direkt starten
 
Die Konfigurationsdatei befindet sich unter {{ic|/etc/systemd/timesyncd.conf}}. Es kann der vorhandene {{ic|Servers}} Eintag einkommentiert werden. Sollten einem die voreingestellten Google Server nicht gefallen, können auch andere [http://www.pool.ntp.org/de/ NTP-Server] eingetragen werden.
 
{{hc|/etc/systemd/timesyncd.conf|2=
[Time]
Servers=time1.google.com time2.google.com time3.google.com time4.google.com}}
 
Zu beachten ist hierbei allerdings, das der Dienst für den Netzzugriff auch den Dienst systemd-networkd benötigt. systemd-networkd wird aber nur benötigt zur Überwachung ob die Netzwerkschnittstelle aktiv ist oder nicht. systemd-networkd kann also parallel zu bereits vorhanden Netwerkdiensten wie netctl betrieben werden.
 
== Eigene Services erstellen ==
Eigene Services werden in {{ic|/etc/systemd/system}} abgelegt, und sind einfache INI-Dateien, in denen die Anweisungen für systemd stehen. Dieses generiert aus der Datei eine Service-Unit, die mittels {{ic|systemctl}} verwaltet werden kann, und deren Verhalten von {{ic|journald}} geloggt und über {{ic|journalctl}} eingesehen werden kann.
 
[Unit]
Description=OpenSSH Daemon
Wants=sshdgenkeys.service
After=sshdgenkeys.service
After=network.target
[Service]
ExecStart=/usr/bin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
 
Die Service-Datei für den SSH-Daemon (eigentlich „Service“) beinhaltet drei Abschnitte. Zuerst werden Informationen für die Service-Unit verzeichnet. Darunter die Beschreibung, und welche anderen Units von dem Service benötigt werden, und wann der Service in Abhängigkeit zu anderen Units gestartet werden soll. Darunter befindet sich in diesem Fall die eine Target-Unit, nämlich die für das Netzwerk, das heißt, die Service-Unit für SSH startet erst dann den SSH-Service, wenn die Target-Unit für das Netzwerk gestartet wurde, und verlangt dann wiederum die Service-Unit {{ic|sshdgenkeys}}, nach derer sie den SSH-Service erst startet.
 
Der Service selbst besteht im Abschnitt {{ic|[Service]}} aus mehreren Befehlen, die auch mehrfach vorkommen können. Hier werden die eigentlichen Programme des Services, sowie sein Verhalten definiert. Zudem gibt es hier noch einen Abschnitt {{ic|[Install]}}, der Installationsinformationen für die Unit bereithält. Dieser Abschnitt ist nicht verpflichtend. Es müssen lediglich {{ic|[Unit]}} und gemäß der Logik {{ic|[Service]}} enthalten sein.
 
Die Manpages {{ic|systemd.unit}} und {{ic|systemd.service}} beinhalten ausführliche Informationen zum erstellen von eigenen Service-Units, sowie verweise auf weitere Manpages zum erstellen von anderen Units.
 
=== Variablen ===
Service-Dateien können Variablen enthalten. Einige wichtige Variablen zeigt die folgende Tabelle auf.
 
{|{{prettytable}}
|-
! Variable
! Inhalt
! Info
|-
| {{ic|%n}}
| Name
| Zugriff auf den vollständigen Unit-Namen
|-
| {{ic|%i}}
| Instanzname
| Units, die ein {{ic|@}} im Dateinamen haben, können mittels {{ic|systemctl start name@wert}} gestartet werden, hiermit kann auf {{ic|wert}} zugegriffen werden.
|-
| {{ic|%u}}
| Benutzername
| Zugriff auf den namen des für diese Unit konfigurierten Useraccounts, oder – wenn nicht gesetzt – den Useraccountnamen des Users, unter dem systemd läuft.
|-
| {{ic|%b}}
| Boot-ID
| Die weiter oben beschriebene Boot-ID kann ebenfalls in Unit-Definitionen verwendet werden.
|}
 
Eine ausführliche Liste aller Variablen, sowie eine ausführliche Beschreibung eben dieser beinhaltet die Manpage {{ic|systemd.unit}}.


== Siehe auch ==
== Siehe auch ==
* [[ArchLinux mit verschlüsseltem LVM und Systemd]]
* [[ArchLinux mit verschlüsseltem LVM und Systemd]]
* [[systemd/Eigener Service|Einen eigenen systemd-Service erstellen]]
* [[Systemd/Timers|Systemd Timer]]
* Gängige/Wichtige Services
** [[systemd/systemd-networkd|systemd-networkd]] Netzwerkverbindungsverwaltung
** [[systemd/systemd-timesyncd|systemd-timesyncd]] für die Zeitsynchronisierung per NTP
** [[Systemd/systemd-resolved|systemd-resolved]] für die Namensauflösung per DNS
** ''Wiki-Autoren: Bitte mit Artikeln zu wichtigen systemd-eigenen Services ergänzen.''


== Weblinks ==
== Weblinks ==

Aktuelle Version vom 18. November 2019, 20:09 Uhr

systemd ist der Init-Prozess von Arch Linux. Dieser startet, überwacht, und beendet alle weiteren Services, und ist für das Loggen von Servicerückmeldungen und Benutzerinteraktionen zuständig. Zudem verwaltet systemd die mounts, und beherrscht die Abhängigkeitsauflösung beim Starten von zusätzlichen Services. Zusätzlich wird mit systemd-boot ein Bootloader mitgeliefert.

Installation

systemd gehört unter Arch zur Standard-Installation und muss nicht explizit installiert werden.

Konfiguration

Über mehrere Konfigurationsdateien in /etc/systemd können die Eigenschaften von systemd vorgegeben werden. Über gleichnamige Manpages bekommt man ausführliche Informationen zu den einzelnen Optionen in den jeweiligen Konfigurationsdateien.

In /etc/systemd/system kann man eigene Service-Dateien ablegen. Dies sind Konfigurationsdateien im INI-Format, anhand derer von systemd verwaltbare Services erstellt werden können.

Systemkonfiguration

Folgende Dateien und systemd-Programme und -Services werden für die Systemkonfiguration bei der Verwendung von systemd benutzt.

Datei systemd-Programm Verwendungszweck
systemctl Administration und Prüfung der verwendeten Services
journalctl Logeinträge prüfen
/etc/hostname hostnamectl Festlegen des Computer-Namens im Netzwerk
/etc/localtime timedatectl Festlegen des Datums, der Uhrzeit, und der Zeitzone
/etc/locale.{conf,gen} localectl Definiert die verwendete Locale des Systems
loginctl Verwaltung der Logins und deren Berechtigungen

Weitergehende Informationen zur Konfiguration enthält der Abschnitt zur Systemkonfiguration der Einsteigeranleitung.

systemctl

Die vier wichtigsten Parameter für systemctl sind start, stop, enable und disable.

  • systemctl
    • start servicename startet einen Service einmalig
    • stop servicename stoppt einen laufenden Service sauber
    • enable servicename aktiviert den Service für den automatischen Start
    • disable servicename deaktiviert den Autostart des Services

Die zusätzliche Option --now schließt bei einem Kommandos enable den start und bei disable den stop mit ein, d. h. nach einem enable wird der Service auch sofort gestartet bzw. nach einem disable sofort gestoppt sofern der enable bzw. disable erfolgreich war.

Über status kann man sich den Service-Status, sowie generelle Informationen über den betreffenden Service anzeigen lassen.

systemctl status sshd
● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Thu 2014-06-05 05:54:09 CEST; 2 days ago
 Main PID: 202 (sshd)
   CGroup: /system.slice/sshd.service
           └─202 /usr/bin/sshd -D

Hier wird am Beispiel des SSH-Services der aktuelle Status, sowie systembezogene Informationen angezeigt. Der Service wurde vor zwei Tagen geladen, dazu wurde die Service-Datei /usr/lib/systemd/system/sshd.service, und der Service ist momentan aktiv und funktioniert. Zudem wird er automatisch gestartet (enabled in der Zeile „Loaded“).

systemctl status sshd
● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: inactive (dead) since Sat 2014-06-07 21:47:14 CEST; 7min 14s ago
  Process: 202 ExecStart=/usr/bin/sshd -D (code=exited, status=0/SUCCESS)
 Main PID: 202 (code=exited, status=0/SUCCESS)

Hier wurde der SSH-Service vor knapp über 7 Minuten angehalten, ist aber nach wie vor für den automatischen Start vorgesehen.

systemctl status sshd
● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled)
   Active: inactive (dead)

Der Service ist gestoppt, und nicht für den automatischen Start vorgesehen.

Man kann sich zudem den Status von Mounts anzeigen lassen, indem man die entsprechende Bezeichnung oder Gerätedatei übergibt.

systemctl status /home
● home.mount - /home
   Loaded: loaded (/etc/fstab)
   Active: active (mounted) since Thu 2014-06-05 05:54:08 CEST; 2 days ago
    Where: /home
     What: /dev/sda3
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)

Hier wird angezeigt, dass /home über die fstab eingebunden wird, und vor zwei Tagen gemountet wurde.

systemctl status /dev/sda2
● dev-sda2.device - WDC_WD3200AAKS-75L9A0 swap
   Follow: unit currently follows state of sys-devices-pci0000:00-0000:00:1f.2-ata1-host0-target0:0:0-0:0:0:0-block-sda-sda2.device
   Loaded: loaded
   Active: active (plugged)
   Device: /sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda2

Auf /dev/sda2 wird der Swap abgelegt, dieser wird von systemd verwaltet.

Systemverwaltung mit systemctl

Neben der Serviceverwaltung dient systemctl auch zur Systemverwaltung.

  • systemctl
    • halt hält das System an, ohne es auszuschalten
    • poweroff hält das System an, und schaltet es aus
    • reboot startet das System neu
    • hibernate versetzt das System in den Ruhezustand

Je nach Konfiguration können diese Befehle auch mit Useraccounts ausgeführt werden, und bedürfen keinen root-Rechten.

journalctl

Das Programm journalctl dient als Schnittstelle zu journald, systemds Logeintragsservice. Je nach Konfiguration kann das Journal nur im Arbeitsspeicher abgelegt werden, auf ein entferntes Gerät geschrieben werden, ganz regulär in Dateien gesichert werden, oder auch signiert, und so gegen Manipulation geschützt werden.

Durch die Eingabe von nur journalctl wird das aktuell angelegte System-Log angezeigt, anhand dessen Fehler analysiert werden können. Darüber hinaus bietet das Programm noch eine Vielzahl an weiteren Optionen

journalctl --list-boots
 […]
 -3 4f8ea7eaf576422abeabbcf6bd01a482 Thu 2014-05-19 08:54:18 CEST—Sat 2014-05-25 22:15:54 CEST
 -2 8b3e482a56c04128902b3bc627221865 Thu 2014-05-27 05:54:04 CEST—Sat 2014-06-01 20:55:12 CEST
 -1 a39ac4caa1a84de9be632afe48d79021 Thu 2014-06-02 07:31:14 CEST—Sat 2014-06-03 16:38:21 CEST
  0 42672184a2d7485ea7288c250f6d2dee Thu 2014-06-05 05:54:04 CEST—Sat 2014-06-07 21:50:26 CEST

Es wird eine Tabelle mit allen bisherigen Boots, sowie der Zeit, zu der das System heruntergefahren wurde ausgegeben. Damit diese Liste nicht unnötig lang wird, kann mittels -b ein Offset angegeben werden, zum Beispiel listet -b -5 die letzten fünf Boots auf, während -b 5 die ersten fünf Boots auflisten würde. Die Angabe vor dem Datum ist die Boot-ID, anhand derer alle Logeinträge des jeweiligen Zeitraums gefiltert werden können. Will man anhand des Beispiels alle Meldungen des Betriebszeitraums vom 27. Mai bis 01. Juni ansehen, geht dies wie folgt.

journalctl --boot 8b3e482a56c04128902b3bc627221865

Es werden dann alle diesen Zeitraum betreffenden Meldungen angezeigt. --boot kann in Kombination mit allen Funktionen von journalctl verwendet werden.

journalctl --boot a39ac4caa1a84de9be632afe48d79021 --unit ntpd --output json

Hiermit werden alle Logeinträge bezüglich des Services ntpd für den Beispielzeitraum vom 02. Juni bis zum 03. Juni als JSON formatiert ausgegeben. Mit der Kombination verschiedener Optionen kann man sich also seine „Wunschformatierung“ nach belieben selbst erstellen.

Siehe auch

Weblinks