📌  相关文章
📜  wsl 系统尚未使用 systemd 作为 init 系统启动 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:48:35.417000             🧑  作者: Mango

WSL 系统尚未使用 systemd 作为 init 系统启动 - Shell-Bash

如果你使用的是 WSL(Windows Subsystem for Linux),那么你可能会遇到以下问题:

  • 无法使用 Systemd 运行服务;
  • 无法使用 systemctl 命令管理服务。

这是因为 WSL 目前还不支持 Systemd 作为 init 系统启动。但是,有一些解决方案可以让你在 WSL 中使用 Systemd。

解决方案
使用 WSL 2

WSL 2 是目前最新的版本,它底层使用虚拟化技术,可以完全模拟 Linux 系统,包括 init 系统。因此,在 WSL 2 中,你可以使用 Systemd 运行服务,并使用 systemctl 命令管理服务。但是,前提是你的 Windows 10 系统版本需要是 1903 或更高版本。

使用 Docker

你可以使用 Docker 在 WSL 中运行服务。Docker 可以在容器中运行服务,容器内的操作系统可以是任意系统,因此可以使用 Systemd 作为 init 系统启动。

具体做法是,在 WSL 中安装 Docker,然后运行一个带有 Systemd 的容器,把需要运行的服务放进容器中。

示例代码:

# 安装 Docker
sudo apt-get update
sudo apt-get install -y docker.io

# 运行容器
sudo docker run -d \
  --name systemd-test \
  --privileged \
  -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
  debian:systemd

# 进入容器
sudo docker exec -it systemd-test bash

# 在容器内安装服务
apt-get update
apt-get install -y nginx

# 启动服务
systemctl start nginx
使用 Systemd-cron

Systemd-cron 是一个通过 Systemd 启动的 cron 服务,它可以模拟 Systemd 的一些功能。通过安装 Systemd-cron,你可以在 WSL 中使用 Systemd 运行服务,并使用 systemctl 命令管理服务。

示例代码:

# 安装 Systemd-cron
sudo apt-get update
sudo apt-get install -y systemd-cron

# 启动 Systemd-cron
sudo systemctl start cron

# 在 Systemd-cron 中启动服务(以 nginx 为例)
sudo systemctl enable nginx
sudo systemctl start nginx
总结

WSL 目前还不支持 Systemd 作为 init 系统启动,但是有一些解决方案可以让你在 WSL 中使用 Systemd。你可以使用 WSL 2、Docker 或 Systemd-cron,根据自己的需求选择适合的解决方案。