如何解决win10 子系统用wsl安装ubuntu22.04不能用systemctl?

你可以邀请下面用户,快速获得回答

委托刘看山邀请

开启后为你智能邀请潜在的回答者
开启邀请
[object Object]

TA 已帮助 34 人获得解答
邀请回答
[object Object]

TA 已帮助 52 人获得解答
邀请回答
[object Object]

TA 已帮助 48 人获得解答
邀请回答
[object Object]

TA 已帮助 28 人获得解答
邀请回答
更多推荐结果
3 个回答
默认排序
31 人赞同了该回答
目录
收起
Distrod
安装方法一:Install a New Distro
安装方法二:Make your Current Distro Run Systemd

2022/9/26更新:

微软的 WSL 现已支持 systemd。


WSL 中使用 systemctl 命令会报错,报错信息如下。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

WSL 并没有通过 systemd 启动,所以无法执行该操作。但是系统中是有 systemd 命令的,命令位置在 /usr/bin/systemctl。

详情可以查看GitHub:

Systemd support for Windows Subsystem for Linux (WSL) · Issue #8036 · systemd/systemd (github.com)


如果是WSL1的话,可以升级WSL2,按以下方法启用systemd。

要使用systemctl命令 ,要先启用systemd,即system daemon

这里选择安装Distrod来启用systemd。


Distrod

Distrod - WSL2 Distros with Systemd!

GitHub地址:nullpo-head/wsl-distrod: Distrod is a meta-distro for WSL 2 which installs Ubuntu, Arch, Debian, Gentoo, etc. with systemd in a minute for you. Distrod also has built-in auto-start feature on Windows startup and port forwarding ability. (github.com)

Distrod是一个基于systemd的WSL2元发行版,它允许您在一分钟内安装Ubuntu,Arch Linux,Gentoo和许多其他带有systemd的发行版,或者使您当前的发行版以systemd运行。

Distrod还提供内置的自动启动功能和端口转发 服务。这允许您在 Windows 启动时启动 systemd 托管服务,并使其可从 Windows 外部访问。

  • 适用的发行版:以下发行版经过持续测试
  • Ubuntu, Debian, Arch Linux, Fedora, CentOS, AlmaLinux, Rocky Linux, Kali Linux, Linux Mint, openSUSE, Amazon Linux, Oracle Linux, Gentoo Linux

(参见Integration test on Linux (distro_name))

  • 其他发行版可能有效,也可能不起作用

安装方法一:Install a New Distro

安装新的发行版。

  1. 请确保您的默认 WSL 版本为 2。
wsl --set-default-version 2
  1. 下载并解压缩 github.com/nullpo-head/,然后双击exe文件
  2. 按照向导安装新的发行版。
  3. [可选]若要使发行版在 Windows 启动时启动,请运行以下命令。
sudo /opt/distrod/bin/distrod enable --start-on-windows-boot

安装方法二:Make your Current Distro Run Systemd

让您当前的发行版运行Systemd。

通过此安装,systemd 已在 WSL 2 发行版中启用。

1. 下载并运行最新的安装程序 脚本。

2.  curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
3.  chmod +x install.sh
sudo ./install.sh install

此脚本安装发行版,但尚未启用它。

2. 在发行版中启用Distrod

您有两种选择。如果要在 Windows 启动时自动启动Distrod,请通过以下命令启用 Distrod

/opt/distrod/bin/distrod enable --start-on-windows-boot

否则

/opt/distrod/bin/distrod enable

如果要在以后启用自动启动,则可以再次运行 with 。enable--start-on-windows-boot

3. 重新启动发行版

关闭 WSL 的终端。打开一个新的命令提示符 窗口,然后运行以下命令。

wsl --terminate Distrod

重新打开新的WSL窗口后,shell将在systemd会话中运行。


安装完毕后,可以运行以下命令进行查询

systemctl status | cat

如果帮助到了你,不妨点个赞或者点个关注。

真诚赞赏,手留余香
赞赏
还没有人赞赏,快来当第一个赞赏的人吧!
赞同 31​ 7 条评论
分享
收藏 ​ 喜欢
收起
13 人赞同了该回答

WSL 中暂时不支持 systemctl,所以使用下面的命令会报错。

sudo systemctl

报错信息为

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

即系统没有通过 systemd 启动,所以不能操作。

WSL 的官方文档上也提到了这一点。

目前 WSL 不支持 systemd(Linux 中的 服务管理系统 )。

但是有折中的方法。

可以把 systemctl 命令换成 /etc/init.d/

例如

sudo systemctl status docker

换成下面这样

sudo /etc/init.d/docker status

也可以使用 service 命令

sudo service docker status

赞同 13​ 添加评论
分享
收藏 ​ 喜欢
收起
6 人赞同了该回答

WSL里的init用的是微软魔改的一个init,要用systemd早些年有些方案,但都不是非常稳定不太推荐,如果真想了解可以看下 genie ,在WSL用户空间额外运行一个systemd 的方案,最早有替换 init 为systemd的脚本但现在不要再用了。

如果只是要启动服务, service 命令调用 init 脚本的方式是可用的,若需要systemd特性依赖的话老实上虚拟机 或者docker里嵌套环境。

如果要使用Docker的话,安装 Docker Desktop 启用 WSL 发行版集成 就能在 WSL 内调用 Docker 了。

赞同 6​ 添加评论
分享
收藏 ​ 喜欢
收起
写回答







如何解决win10 子系统用wsl安装ubuntu22.04不能用systemctl?

posted @ 2024-09-10 11:34  坦笑&&life  阅读(11)  评论(0编辑  收藏  举报  来源