Systemd Grundlagen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „*Systemd Grundlagen = Besonderheiten = ; Abwärtskompatibilität zu SysVinit-Scripten : systemd ist abwärtskompatibel, jedoch werden Features benutzt, wel…“)
 
 
(11 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
−
*[[Systemd Grundlagen]]
+
*[[Systemd Basics]]
−
= Besonderheiten =
+
*[[Systemd Besonderheiten]]
−
; Abwärtskompatibilität zu SysVinit-Scripten
+
*[[Systemd Units]]
−
: systemd ist abwärtskompatibel, jedoch werden Features benutzt, welche nur unter Linux verfügbar sind.
+
*[[Systemd Runlevel / Targets]]
−
: Somit ist er nur auf Systemen mit Linux-Kernel lauffähig.
+
*[[Systemd systemctl]]
−
; Parallelisierung
+
*[[Systemd Service examples]]
−
: Es werden möglichst viele Prozesse gleichzeitig beim Booten gestartet um das System optimal aus zulasten.
+
*[[Systemd Best Practice]]
−
; Abhängigkeits-Regeln
+
*[[Systemd kurz und knapp]]
−
: Um bei der Parallelisierung dennoch sicher zustellen dass Dienste welche von anderen Diensten benötigt werden rechtzeitig vor diesen zu starten. (z.B. '''D-Bus''')
+
*[[systemctl kurz und knapp]]
−
; cgroups
 
−
: Anstelle von ProzessIDs werden cgroups benutzt. Dies bedeutet, dass Dienste nicht mehr "Abhauen" können. Selbst durch doppeltes Forken.
 
−
; Ereignis basiertes Starten von Diensten
 
−
: Ähnlich '''inetd''' kann systemd Dienste bei Bedarf starten.
 
−
: Dies kann z.B. über einen Socket oder Bus geschehen.
 
−
; Binärscripte
 
−
: Langfristig sollen Shell-Skripte komplett verschwinden und anstelle eines Init-Skripts jeder Dienst eine Konfigurationsdatei erhalten in welcher definiert wird wie dieser zu starten ist.
 
−
; Kommandos
 
−
: Bei Sys-V-init laufen Dienste immer im Hintergrund als Daemon. Bei Systemd wird erwartet, dass der Prozess hinter exec im Vordergrund läuft. Nur so lange der Prozess im Vordergrund durchgeführt wird betrachtet Systemd ihn auch als laufend. Endet der mit exec gestarter Prozess, so endet für Systemd auch der Service und dieses wartet nun darauf, dass wieder ein passendes Traget auftritt.
 
−
; Prozesse beenden
 
−
: Beim Stoppen eines Jobs kümmert sich Systemd ausschließlich um den per exec im Vordergrund gestarteten Prozess. Er sendet ein SIGTERM und erwartet, dass er sich selbst beendet. Falls er dies jedoch nicht tut wird er mittels SIGKILL einfach abgebrochen.
 
−
 
 
−
= Verfügbarkeit (01/2015) =
 
−
 
 
−
{|
 
−
 
 
−
 
 
−
{|
 
−
! Distribution !! Status
 
−
|-
 
−
| '''Fedora''' || Fedora seit version 15 Standard
 
−
|-
 
−
| '''openSUSE''' || openSUSE seit 12.1 Standard
 
−
|-
 
−
| '''Mandriva''' || seit Mandriva 2011 Standart
 
−
|-
 
−
| '''Debian''' || seit debian 8 jessie Standart
 
−
|-
 
−
| '''Ubuntu''' || seit 15.04
 
−
|-
 
−
| '''Arch''' || seit Oktoper 2012
 
−
|-
 
−
| '''Red Hat''' || seit version 7
 
−
|}
 
−
 
 
−
systemd wurde als externe Abhängigkeit für '''GNOME 3.2''' vorgeschlagen.
 
−
 
 
−
= Units =
 
−
 
 
−
Systemd wird über Dateien mit einem INI-Datei ähnlichen Format konfiguriert. In der Terminologie von systemd sind dies "Units". Bei Ubuntu vorinstallierte Units sind im Ordner /lib/systemd/system/ gespeichert. Falls sich jedoch eine Unit mit gleichem Namen im Verzeichnis /etc/systemd/system/ befindet, so wird diese bevorzugt und jene unterhalb von /lib ignoriert. Damit hat man die Möglichkeit, eine Unit an eigene Gegebenheiten anzupassen, ohne dass man befürchten muss, dass sie bei einer Systemaktualisierung überschrieben wird. Es existieren verschiedene Typen von Units, die von systemd je nach Endung des Dateinamens unterschiedlich behandelt werden:
 
−
 
 
−
 
 
−
{| class="wikitable"
 
−
! Typ !! Beschreibung
 
−
|-
 
−
| .device ||  Legt Gerätedateien an
 
−
|-
 
−
|  .mount ||  Ein- und Aushängen von Dateisystemen
 
−
|-
 
−
|  .path  || Startet die Unit via inotify
 
−
|-
 
−
|  .service || Für Dienste
 
−
|-
 
−
|  .socket || Stellt Verbindungen zwischen Prozessen her
 
−
|-
 
−
|  .target || Definiert eine Gruppe von Units
 
−
|-
 
−
|  .timer ||    Für wiederkehrende Aufgaben, ähnlich cron-Jobs
 
−
|-
 
−
|}
 
−
 
 
−
===Befehl zum Anzeigen===
 
−
*systemctl list-units (zum anzeigen aller Units auf einem System)
 
−
 
 
−
 
 
−
*systemctl list-units --type service (zum anzeigen aller Units vom Typ "Service" auf einem System)
 
−
<pre>
 
−
apport.service            loaded active    exited        LSB: automatic crash r
 
−
apt-daily.service        loaded activating start  start Daily apt activities
 
−
atd.service              loaded active    running      Deferred execution sch
 
−
console-setup.service    loaded active    exited        Set console keymap
 
−
cron.service              loaded active    running      Regular background pro
 
−
dbus.service              loaded active    running      D-Bus System Message B
 
−
getty@tty1.service        loaded active    running      Getty on tty1
 
−
grub-common.service      loaded active    exited        LSB: Record successful
 
−
icinga2.service          loaded active    running      LSB: icinga2 host/serv
 
−
ifup@ens18.service        loaded active    exited        ifup for ens18
 
−
irqbalance.service        loaded active    running      LSB: daemon to balance
 
−
iscsid.service            loaded active    running      iSCSI initiator daemon
 
−
kmod-static-nodes.service loaded active    exited        Create list of require
 
−
lvm2-lvmetad.service      loaded active    running      LVM2 metadata daemon
 
−
lvm2-monitor.service      loaded active    exited        Monitoring of LVM2 mir
 
−
lxcfs.service            loaded active    running      FUSE filesystem for LX
 
−
lxd-containers.service    loaded active    exited        LXD - container startu
 
−
mdadm.service            loaded active    running      LSB: MD monitoring dae
 
−
mysql.service            loaded active    running      MySQL Community Server
 
−
networking.service        loaded active    exited        Raise network interfac
 
−
ondemand.service          loaded active    exited        LSB: Set the CPU Frequ
 
−
open-iscsi.service        loaded active    exited        Login to default iSCSI
 
−
php7.0-fpm.service        loaded active    running      The PHP 7.0 FastCGI Pr
 
−
polkitd.service          loaded active    running      Authenticate and Autho
 
−
rc-local.service          loaded active    exited        /etc/rc.local Compatib
 
−
resolvconf.service        loaded active    exited        Nameserver information
 
−
rsyslog.service          loaded active    running      System Logging Service
 
−
snapd.service            loaded active    running      Snappy daemon
 
−
ssh.service              loaded active    running      OpenBSD Secure Shell s
 
−
systemd-journal-flush.service loaded active    exited        Flush Journal to Persi
 
−
systemd-journald.service  loaded active    running      Journal Service
 
−
systemd-logind.service    loaded active    running      Login Service
 
−
systemd-modules-load.service loaded active    exited        Load Kernel Modules
 
−
systemd-random-seed.service loaded active    exited        Load/Save Random Seed
 
−
systemd-remount-fs.service loaded active    exited        Remount Root and Kerne
 
−
systemd-sysctl.service    loaded active    exited        Apply Kernel Variables
 
−
systemd-timesyncd.service loaded active    running      Network Time Synchroni
 
−
systemd-tmpfiles-setup-dev.service loaded active    exited        Create Static Device N
 
−
systemd-tmpfiles-setup.service loaded active    exited        Create Volatile Files
 
−
systemd-udev-trigger.service loaded active    exited        udev Coldplug all Devi
 
−
systemd-udevd.service    loaded active    running      udev Kernel Device Man
 
−
systemd-update-utmp.service loaded active    exited        Update UTMP about Syst
 
−
systemd-user-sessions.service loaded active    exited        Permit User Sessions
 
−
ufw.service              loaded active    exited        Uncomplicated firewall
 
−
user@0.service            loaded active    running      User Manager for UID 0
 
−
</pre>
 
−
 
 
−
= Administration =
 
−
== Runlevel / Targets ==
 
−
{| class="wikitable"
 
−
! SystemVinit Runlevel !! Systemd Target !! Kommentar
 
−
|-
 
−
| 0 || runlevel0.target, poweroff.target || System herunterfahren
 
−
|-
 
−
| 1, s, single || runlevel1.target, rescue.target || Einzelnuzer Modus
 
−
|-
 
−
| 2, 4 || runlevel2.target, runlevel4.target, multi-user.target || Benuzerdefiniert, Standardmäsig identisch zu 3
 
−
|-
 
−
| 3 || runlevel3.target, multi-user.target || Multi-user, Shell. Anmeldung über mehrere Consolen und7oder netzwerk
 
−
|-
 
−
| 5 || runlevel5.target, graphical.target || Multi-user, Grafisch. Gewöhnlich alle Dienste aus 3 sowie grafische Oberfläche
 
−
|-
 
−
| 6 || runlevel6.target, reboot.target || Reboot
 
−
|-
 
−
| emergency || emergency.target || Notfall Shell
 
−
|}
 
−
 
 
−
== systemctl ==
 
−
 
 
−
=== aktivieren/deaktivieren systemstart ===
 
−
*systemctl enable
 
−
*systemctl disable
 
−
*systemctl is-enabled
 
−
=== service steuern ===
 
−
*systemctl start
 
−
*systemctl stop
 
−
*systemctl status
 
−
*systemctl reload
 
−
*systemctl restart
 
−
=== service files anzeigen ===
 
−
*systemctl list-units
 
−
*systemctl list-unit-files
 
−
*systemctl --failed
 
−
 
 
−
=== rechner herunterfahren ===
 
−
*systemctl isolate halt
 
−
*systemctl poweroff
 
−
*systemctl suspend
 
−
*systemctl hibernate
 
−
 
 
−
==Service File==
 
−
Beispiel:
 
−
*/etc/systemd/system/firewall.service
 
−
<pre>
 
−
[Unit]
 
−
Description=firewall
 
−
After=network.target syslog.target
 
−
 
 
−
[Service]
 
−
RemainAfterExit=yes
 
−
ExecStart=/usr/local/sbin/firewall start
 
−
ExecStop=/usr/local/sbin/firewall stop
 
−
User=root
 
−
 
 
−
[Install]
 
−
WantedBy=multi-user.target
 
−
</pre>
 
−
 
 
−
==Änderungen==
 
−
Nach Änderungen
 
−
*systemctl daemon-reload
 
−
*systemctl enable firewall.service
 
−
*systemctl start firewall.service
 
−
 
 
−
= journalctl =
 
−
systemd verwendet standardmäßig ein zentrales Protokoll bzw. Journal, in das von journald alle Logmeldungen geschrieben werden. Zur Abfrage des Journals dient der Befehl journalctl.
 
−
==Bootlogs==
 
−
*journalctl -b
 
−
==Journal vom 1 September bis zum 2. September 3 Uhr==
 
−
*journalctl --since "2016-09-01" --until "2016-09-02 03:00"
 
−
 
 
−
 
 
−
== FAQ ==
 
−
; Wie setze ich das Runlevel beim Booten?
 
−
: Unter systemd werden Runlevel als Targets bezeichnet. Um das Boot "Target" beim Booten zu setzen hängt man z.B. einen der folgenden Kernel Parameter an.
 
−
* <code>systemd.unit=multi-user.target</code> (entspricht Runlevel 3)
 
−
* <code>systemd.unit=rescue.target</code> (entspricht Runlevel 1)
 
−
 
 
−
 
 
−
; Wie setze ich das Standard Target?
 
−
: Für Runlevel 3
 
−
# systemctl -f enable multi-user.target
 
−
: Für Runlevel 5
 
−
# systemctl -f enable graphical.target
 

Aktuelle Version vom 9. Januar 2023, 12:46 Uhr