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:
Durch seine modulare Architektur kann systemd Stück für Stück erweitert werden.
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:
systemd analysiert Abhängigkeiten mit:
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
systemd bringt ein eigenes Logging-System:
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"
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.