使用 systemd 通过 WSL 管理 Linux 服务

适用于 Linux 的 Windows 子系统(WSL)现在支持 systemd,它是一种 init 系统和服务管理器,许多流行的 Linux 发行版,例如 Ubuntu、Debian 等都在使用。 (什么是系统?)。

初始系统默认值最近已不再是 SystemV,使用 wsl --install默认值安装的 Ubuntu 当前版本的默认值现在是 systemd。 除当前版本的 Ubuntu 以外的 Linux 分发版仍可能使用 WSL init,类似于 SystemV init。 若要更改为 systemd,请参阅 如何启用 systemd

Linux 中的 systemd 是指什么?

根据 systemd.io:“systemd 是 Linux 系统的基本构建基块套件。 它提供一个系统和服务管理器,该管理器作为 PID 1 运行并启动系统的其余部分。”

Systemd 主要是 init 系统和服务管理器,包括按需启动守护程序、装载和自动装载点维护、快照支持以及使用 Linux 控制组进行进程跟踪等功能。

大多数主要的 Linux 分发版现在都运行 systemd,因此在 WSL 上启用它可使体验更接近于使用裸机 Linux。 请参阅带 systemd 演示的视频公告或下面的 systemd 使用示例,详细了解 systemd 提供的功能。

如何启用systemd?

systemd 现在是将使用 wsl --install默认值安装的 Ubuntu 当前版本的默认值

若要为 WSL 2 上运行的任何其他 Linux 发行版启用 systemd(更改默认值,使其不再使用 systemv 初始值):

  1. 确保 WSL 版本为 0.67.6 或更高版本:

    • 若要检查,请运行 wsl --version;如果命令引发 Invalid command line option: --version 错误,则必须更新 WSL;
    • 若要更新、运行 wsl --update从 Microsoft Store下载最新版本。
  2. 打开 Linux 分发版的命令行并输入 cd / 以访问根目录,然后 ls 列出文件。 你将看到一个名为“etc”的目录,其中包含分发的 WSL 配置文件。 打开此文件,以便通过输入:nano /etc/wsl.conf,使用 Nano 文本编辑器进行更新。

  3. wsl.conf 文件中添加以下行,你现在已打开此文件来更改用于 systemd 的初始值:

    [boot]
    systemd=true
    

    在 WSL 2 上启用 systemdEnable systemd on WSL 2在 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 的 Ubuntu on WSL 项目经理)宣布 systemd 支持并展示其启用功能的一些演示。

Systemd 示例

依赖于系统的 Linux 应用程序的几个示例包括:

  • snap:Canonical 开发的软件打包和部署系统,适用于使用 Linux 内核和 systemd init 系统的操作系统。 这些包称为“snaps”,用于生成快照的命令行工具称为“Snapcraft”,可以下载/安装快照的中心存储库称为“Snap Store”,运行快照所需的守护程序(从应用商店下载、装载到位置、限制和运行应用)称为“snapd”。 整个系统有时称为“snappy”。请尝试运行命令:snap install spotify

  • microk8s:一种开源、低运维、简化生产环境的 Kubernetes,可自动部署、扩展和管理容器化应用。 按照说明 在 WSL2 上安装 MicroK8s,查看 入门教程,或观看关于 在 Windows 上使用 MicroK8s 和 WSL 2 的 Kubernetes 视频

  • systemctl:一个命令行实用工具,用于控制和检查系统,并帮助与 Linux 分发版上的服务进行交互。 请尝试以下命令:systemctl list-units --type=service 查看哪些服务可用及其状态。

一些相关教程演示了使用系统的方法:

启用 systemd 如何影响 WSL 架构?

启用对 systemd 的支持需要更改 WSL 架构。 由于 systemd 需要 PID 1,在 Linux 分发中启动的 WSL 初始化进程将成为系统的子进程。 由于 WSL init 进程负责为 Linux 和 Windows 组件之间的通信提供基础结构,因此更改此层次结构需要重新考虑 WSL init 进程做出的一些假设。 必须进行额外修改,以确保实现正常关闭(因为关闭现在由 systemd 控制),并与 WSLg 兼容,该组件用于运行 Linux 图形用户界面 (GUI),或者显示在窗口中而非命令行中的 Linux 应用。

此外,请务必注意,在这些更改中,系统服务不会使 WSL 实例保持活动状态。 WSL 实例将保持活动状态,就像在此更新之前一样,你可以在这篇 2017 年的后台任务支持博客文章中阅读详细信息。