systemd ist ein Init-System und System-Management-Framework für [[Linux]]. Es ersetzt klassische Init-Systeme wie SysVinit oder Upstart und ist heute der Standard in fast allen großen Linux-Distributionen (RHEL, Fedora, Ubuntu, Debian, Arch, SUSE, uvm.). Es stellt eine komplette Suite an Komponenten zur Verwaltung von Diensten, Logging, Netzwerk, Zeitplanung, Cgroups, Security-Hardening und Ressourcen bereit. systemd besteht aus vielen modularen Komponenten: * PID 1 (systemd) – Init-System & Prozessmanager * systemd-[[journald]] – Logging * systemd-logind – Benutzer- & Sitzungsverwaltung * systemd-[[networkd]] – Netzwerk (Server-Standard in Ubuntu) (veraltet?) * systemd-resolved – DNS Resolver * systemd-timesyncd – NTP/Zeitsynchronisierung * systemd-udevd – Geräteverwaltung * systemd-tmpfiles – temporäre Dateien/Verzeichnisverwaltung * systemd-homed – Nutzerverwaltung (optional) Durch seine modulare Architektur kann systemd Stück für Stück erweitert werden. Nicht jede Systemd Distribution verwendet alle oder die selben Module! =====Units===== systemd verwaltet alles in Form sogenannter Units. Wichtige Unit-Typen: ^Typ^Zweck^ |.service|Dienste| |.socket|Sockets für socket-activated services| |.timer|Cron-Ersatz, zeitgesteuerte Jobs| |.path|Startet Service bei Dateiänderungen| |.mount / .automount|Mountpoints| |.target|Gruppen von Units (z. B. multi-user.target)| |.slice|Cgroup-Bereiche, Ressourcensteuerung| Unit-Dateien liegen unter: * /usr/lib/systemd/system/ -> Distribution * /etc/systemd/system/ -> Administrator-Anpassungen (höchste Priorität) systemd analysiert Abhängigkeiten mit: * Requires= * Wants= * Before= * After= Es startet Dienste parallel, wodurch Bootprozesse erheblich beschleunigt werden. Ein Beispiel: [Unit] Description=Demo Application Wants=network-online.target After=network-online.target [Service] Type=simple User=www-data WorkingDirectory=/opt/app ExecStart=/opt/app/start.sh Restart=on-failure RestartSec=5 # Hardening / Sandboxing ProtectSystem=strict ProtectHome=true PrivateTmp=true NoNewPrivileges=true CapabilityBoundingSet= RestrictSUIDSGID=true RestrictNamespaces=true [Install] WantedBy=multi-user.target =====Logging===== systemd bringt ein eigenes Logging-System: * binär * lokal oder persistent * mit systemd integriert Konfiguration: /etc/systemd/journald.conf Beispiele: [Journal] Storage=persistent SystemMaxUse=1G RuntimeMaxUse=200M ForwardToSyslog=yes Log lesen: journalctl -u nginx.service journalctl -b journalctl --since "1 hour ago" =====DNS===== systemd-resolved ist der DNS-Resolver-Dienst von systemd. # Cache leeren resolvectl flush-caches # status resolvectl status Auf modernen Systemen ist es ein Symlink: /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf Falls du die Datei manuell setzen willst: sudo rm /etc/resolv.conf echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" | sudo tee /etc/resolv.conf Dann nutzt du nicht mehr systemd-resolved.