wsl2 中 systemctl 抛 System has not been booted with systemd as init system
时间: 2024-12-22 16:10:59 浏览: 223
在Windows Subsystem for Linux 2 (WSL2)环境中,遇到`System has not been booted with systemd as init system (PID 1)`错误通常是由于尝试在尚未以systemd作为初始化系统的Linux子系统中运行systemctl命令。WSL2默认使用Microsoft自己的init系统(microsoft-shim)而非systemd。
当你试图执行`systemctl`命令时,它期望的是systemd环境下的操作,但在这个非systemd启动的WSL实例中,该命令不可用。解决这个问题的方法有:
1. **确认环境**:
```shell
echo $SHELL
```
如果输出不是`/usr/bin/bash`(通常与systemd关联),这表明你可能在一个非systemd启动的bash shell中。在这种情况下,你应该回到正常的WSL2 Bash shell。
2. **切换到systemd环境**:
如果你想临时切换到systemd,可以尝试创建一个systemd容器并运行命令。但是请注意,这不是长期解决方案,仅限于特定需求。你可以使用`wsl -e systemctl status`来运行systemctl命令。
3. **重启WSL2**:
关闭并重新启动WSL2,让它从头开始以systemd初始化。可以通过控制面板或PowerShell命令 `wsl --shutdown` 来关闭,然后再通过`wsl`启动。
4. **配置WSL2以使用systemd**:
虽然不太常见,但在某些特殊场景下,你可以选择安装systemd并在WSL2中启用它。这需要对WSL2底层设置有深入理解,不建议常规用户操作。
相关问题--:
1. 如何查看当前WSL子系统的启动方式?
2. 使用systemd容器运行systemctl命令有什么限制?
3. 如何避免频繁重启WSL2而实现systemd的长期支持?
阅读全文
相关推荐
















