共用方式為


使用 systemd 以 WSL 管理 Linux 服務

適用於Linux的 Windows 子系統 (WSL) 現在支援 systemd,這是許多熱門 Linux 發行版所使用的 init 系統和服務管理員,例如 Ubuntu、Debian 等等。 (什麼是系統?)。

init 系統預設值最近已從 SystemV 變更,systemd 現在是目前版本 Ubuntu 的預設版本,該版本將使用 wsl --install 命令 預設值安裝。 除了目前版本的 Ubuntu,其他 Linux 發行版可能仍會使用類似於 SystemV init 的 WSL 初始化程序。 若要變更為 systemd,請參閱 如何啟用 systemd

什麼是Linux中的 systemd?

根據 systemd.io:「systemd 是 Linux 系統的基本建置組塊套件。 它提供了一個以 PID 1 身分執行的系統和服務管理員,並啟動系統的其餘部分。

Systemd 主要是 init 系統和服務管理員,包括啟動精靈、掛接和自動掛接點維護、快照支援,以及使用 Linux 控制群組追蹤等功能。

大部分主要的 Linux 發行版現在都運行 systemd,因此在 WSL 上啟用它可以讓使用體驗更接近於原生 Linux。 請參閱下列的 影片公告,其中包含 systemd 的示範範例,來深入瞭解 systemd 所提供的功能。

如何啟用 systemd?

Systemd 現在是 目前版本 Ubuntu 的預設系統,該版本將使用 wsl --install 命令 進行預設安裝。

若要在 WSL 2 上的任何其他 Linux 發行版中啟用 systemd(將預設從使用 systemv init 變更為使用 systemd):

  1. 請確定您的 WSL 版本為 0.67.6 或更新版本:

    • 若要檢查,請執行 wsl --version;如果命令出現 Invalid command line option: --version 錯誤,您必須更新 WSL。
    • 若要更新、執行 wsl --update從 Microsoft Store下載最新版本。
  2. 開啟 Linux 發行版的命令行,然後輸入 cd / 以存取根目錄,然後 ls 列出檔案。 您會看到一個名為「etc」的目錄,其中包含該發行版的 WSL 組態檔。 開啟此檔案,讓您可以使用 Nano 文字編輯器進行更新,方法是輸入:nano /etc/wsl.conf

  3. 在您現在開啟的 wsl.conf 檔案中新增這幾行,以將使用的 init 更改為 systemd:

    [boot]
    systemd=true
    

    在 WSL 2 上啟用 systemd

  4. 結束 Nano 文字編輯器(Ctrl + X,輸入 Y 以儲存您的變更,並使用 enter 鍵進行確認)。

  5. 接著,您必須關閉 Linux 發行版。 您可以使用 PowerShell 中的 命令 wsl.exe --shutdown 重新啟動所有 WSL 實例。

  6. 重新啟動 Linux 發行版之後,systemd 將會運行。 您可以使用命令 systemctl status 驗證它,以顯示 執行中的 狀態,還有命令 systemctl list-unit-files --type=service,這會顯示與您的 Linux 發行版相關聯的任何服務狀態。

如果您的 Linux 發行版是 Debian/Ubuntu/Kali Rolling,您不僅應該已安裝 systemd 套件,也請確定已安裝 systemd-sysv 套件。

sudo apt-get update -y && sudo apt-get install systemd systemd-sysv -y

深入瞭解 WSL 中的進階設定組態,包括 wsl.conf (特定於發行版) 和 .wslconfig (全域) 組態檔之間的差異、如何更新自動掛載設定等等。

Systemd 示範影片

Microsoft與 Canonical 合作,為 WSL 提供系統支援。 請參閱 Craig Loewen(Microsoft 的 WSL 專案經理)和 Oliver Smith(Canonical 的 WSL 上的 Ubuntu 專案經理)宣布 systemd 支援,並展示其所啟用的一些示範。

Systemd 範例

相依於 systemd 的一些 Linux 應用程式範例如下:

  • snap:Canonical 針對使用 Linux 核心和 systemd init 系統的作業系統所開發的軟體封裝和部署系統。 套件稱為「snaps」,用於建置 snaps 的命令行工具稱為「Snapcraft」,用於下載和安裝 snaps 的中央存放庫稱為「Snap Store」,而執行 snaps 所需的守護程序(包括從商店下載,掛載,限制,以及執行應用程式)稱為「snapd」。 整個系統有時稱為“snappy”。請嘗試執行 命令:snap install spotify

  • microk8s:一種開放原始碼、低作業、最少的生產 Kubernetes,可自動化容器化應用程式的部署、調整和管理。 請依照指示 在 WSL2上安裝 MicroK8s,查看《開始使用教學課程》,或觀看在 Windows 上使用 MicroK8s 和 WSL 2 的 Kubernetes影片。

  • systemctl:用來控制及檢查 systemd 的命令行公用程式,並協助您與 Linux 發行版上的服務互動。 嘗試命令:systemctl list-units --type=service 以查看哪些服務可用及其狀態。

示範如何使用 systemd 的一些相關教學課程:

啟用 systemd 如何影響 WSL 架構?

啟用對 systemd 的支援需要修改 WSL 架構。 由於 systemd 需要 PID 1,在 Linux 發行版中啟動的 WSL init 程式會變成 systemd 的子進程。 因為 WSL init 程式負責提供 Linux 和 Windows 元件之間通訊的基礎結構,因此變更此階層需要重新思考 WSL init 程式所做的一些假設。 必須進行其他修改以確保乾淨關機(因為現在由 systemd 控制關機),並與 WSLg相容,這是 WSL 的一個元件,負責執行以視窗形式顯示而非僅限於命令列的 Linux 圖形使用者介面應用程式。

也請務必注意,使用這些變更時,系統服務不會讓 WSL 實例保持運作。 您的 WSL 執行個體會如同此更新前一樣保持活躍,您可以在 2017 年的背景工作支援部落格文章中詳讀更多資訊。