Verwenden von systemd zum Verwalten von Linux-Diensten mit WSL
Windows-Subsystem für Linux (WSL) unterstützt jetzt systemd, ein Init-System- und Dienst-Manager, der von vielen beliebten Linux-Distributionen wie Ubuntu und Debian verwendet wird. (Was ist systemd?).
Der Systemstandard für init hat sich kürzlich geändert. Statt SystemV ist nun systemd der Standard für die aktuelle Ubuntu-Version, die mit dem wsl --install
-Befehl standardmäßig installiert wird. Linux-Distributionen außer der aktuellen Version von Ubuntu können weiterhin WSL-Init verwenden, ähnlich wie SystemV-Init. Informationen zum Wechseln zu systemd finden Sie unter Aktivieren von systemd.
Was ist systemd in Linux?
systemd.io: „systemd ist eine Reihe grundlegender Bausteine für ein Linux-System. Es stellt einen System- und Dienst-Manager bereit, der als PID 1 ausgeführt wird und den Rest des Systems startet.“
Systemd, in erster Linie ein Init-System- und Dienst-Manager, umfasst Features wie bedarfsgesteuerter Start von Daemons, Wartung des Punkts für Einbindung und automatische Einbindung, Momentaufnahmenunterstützung und Nachverfolgung von Prozessen mithilfe von Linux-Steuerungsgruppen.
Die meisten großen Linux-Distributionen führen jetzt systemd aus, sodass bei Aktivierung auf WSL die Benutzererfahrung noch näher an Bare-Metal-Linux liegt. Sehen Sie sich die Videoankündigung mit systemd-Demos oder Beispielen für die Verwendung von systemd unten an, um mehr darüber zu erfahren, was systemd zu bieten hat.
Wie wird systemd aktiviert?
Systemd ist jetzt die Standardeinstellung für die aktuelle Version von Ubuntu, die mit dem wsl --install
-Befehlsstandard installiert wird.
So aktivieren Sie systemd für alle anderen Linux-Distributionen, die auf WSL 2 ausgeführt werden (Ändern des Standardwerts von der Verwendung von systemv-Init):
Stellen Sie sicher, dass Ihre WSL-Version 0.67.6 oder höher ist. (Führen Sie zum Überprüfen
wsl --version
aus. Führen Sie zum Aktualisierenwsl --update
aus, oder laden Sie die aktuelle Version aus dem Microsoft Store herunter.)Öffnen Sie eine Befehlszeile für Ihre Linux-Distribution, und geben Sie
cd /
ein, um auf das Stammverzeichnis zuzugreifen, und dannls
zum Auflisten der Dateien. Sie sehen ein Verzeichnis mit dem Namen „etc“, das die WSL-Konfigurationsdatei für die Distribution enthält. Öffnen Sie diese Datei, damit Sie eine Aktualisierung mit dem Nano-Text-Editor vornehmen können, indem Sie Folgendes eingeben:nano /etc/wsl.conf
.Fügen Sie diese Zeilen der jetzt geöffneten
wsl.conf
-Datei hinzu, um zu systemd-Init zu wechseln:[boot] systemd=true
Beenden Sie den Nano-Text-Editor (STRG+X, wählen Sie Y aus, um Ihre Änderung zu speichern). Anschließend müssen Sie die Linux-Distribution schließen. Sie können mit dem Befehl
wsl.exe --shutdown
in PowerShell alle WSL-Instanzen neu starten.
Sobald die Linux-Distribution neu gestartet ist, wird „systemd“ ausgeführt. Sie können die Verwendung des Befehls bestätigen: systemctl list-unit-files --type=service
, wodurch der Status aller Dienste angezeigt wird, die Ihrer Linux-Distribution zugeordnet sind.
Erfahren Sie mehr über die Konfiguration erweiterter Einstellungen in WSL, einschließlich des Unterschieds zwischen den Konfigurationsdateien wsl.conf
(verteilungsspezifisch) und .wslconfig
(global), das Aktualisieren von Einstellungen für die automatische Einbindung usw.
Systemd-Demovideo
In Partnerschaft mit Canonical stellt Microsoft die systemd-Unterstützung von WSL bereit. Näheres erfahren Sie in der Ankündigung von Craig Loewen (PM für WSL bei Microsoft) und Oliver Smith (PM für Ubuntu auf WSL bei Canonical) zur systemd-Unterstützung. Außerdem können Sie sich anhand einiger Demos über die Möglichkeiten informieren, die daraus resultieren.
Olivers auf diesen Demos basierende Tutorials im Ubuntu-Blog – einschließlich „Use snap to create a Nextcloud instance in minutes on WSL“ (Verwenden von snap zum Erstellen einer Nextcloud-Instanz in Minuten auf WSL), „Manage your web projects with LXD“ (Verwalten Ihrer Webprojekte mit LXD) und Run a .Net Echo Bot as a systemd service on Ubuntu WSL (Ausführen eines .Net-Echo-Bots als systemd-Dienst auf Ubuntu WSL)
Systemd-Beispiele
Einige Beispiele für Linux-Anwendungen, die von systemd abhängig sind:
snap: ein Softwarepaketierungs- und Bereitstellungssystem, das von Canonical für Betriebssysteme entwickelt wurde, die den Linux-Kernel und das systemd-Init-System verwenden. Die Pakete werden als „Snaps“ bezeichnet, das Befehlszeilentool zum Erstellen von Snaps heißt „Snapcraft“, das zentrale Repository, in dem Snaps heruntergeladen/installiert werden können, wird als „Snap Store“ bezeichnet, und der Daemon, der zum Ausführen von Snaps erforderlich ist (aus dem Store herunterladen, vor Ort einbinden, einschränken und Apps aus ihnen heraus ausführen), wird als „snapd“ bezeichnet. Das gesamte System wird manchmal als „snappy“ bezeichnet. Führen Sie den folgenden Befehl aus:
snap install spotify
.microk8s: Ein Open-Source-, Low-Ops-, minimales Produktions-Kubernetes, das Bereitstellung, Skalierung und Verwaltung von containerisierten Apps automatisiert. Folgen Sie den Anweisungen zum Installieren von MicroK8s auf WSL2, sehen Sie sich das „Erste Schritte"-Lernprogramm an, oder schauen Sie sich das Video unter Kubernetes unter Windows mit MicroK8s und WSL 2 an.
systemctl: Ein Befehlszeilenprogramm, das zum Steuern und Überprüfen von systemd verwendet wird und Ihnen hilft, mit Diensten in Ihrer Linux-Distribution zu interagieren. Probieren Sie den Befehl
systemctl list-units --type=service
aus, um zu sehen, welche Dienste verfügbar sind, und deren Status zu erfahren.
Einige zugehörige Lernprogramme, in denen die Verwendung von systemd veranschaulicht wird:
Essentials zu systemd: Arbeiten mit den Diensten, Einheiten und dem Journal
Gewusst wie: Sandkastenprozesse mit systemd auf Ubuntu 20.04
Wie wirkt sich die Aktivierung von systemd auf die WSL-Architektur aus?
Das Aktivieren der Unterstützung für systemd erforderte Änderungen an der WSL-Architektur. Da systemd PID 1 erfordert, wird der in der Linux-Distribution gestartete WSL-Init-Prozess zu einem untergeordneten Prozess des Systems. Da der WSL-Init-Prozess für die Bereitstellung der Infrastruktur zur Kommunikation zwischen den Linux- und Windows-Komponenten verantwortlich ist, mussten einige der Annahmen, die mit dem WSL-Init-Prozess gemacht wurden, neu überdacht werden, um diese Hierarchie zu ändern. Zusätzliche Änderungen mussten vorgenommen werden, um ein sauberes Herunterfahren (da das Herunterfahren jetzt von systemd gesteuert wird) und Kompatibilität mit WSLg sicherzustellen, der Komponente von WSL, die grafische Linux-Benutzeroberflächen (GUIs) ausführt, oder den Linux-Apps, die in Fenstern statt in der Befehlszeile angezeigt werden.
Es ist auch wichtig zu beachten, dass mit diesen Änderungen systemd-Dienste Ihre WSL-Instanz NICHT am Leben erhalten. Ihre WSL-Instanz bleibt auf die gleiche Weise aktiv wie vor diesem Update, was Sie in diesem Blogbeitrag zur Unterstützung von Hintergrundaufgaben von 2017 lesen können.
Windows Subsystem for Linux