解决方案

使用`systemctl`命令报错:System has not been booted with systemd as init system (PID 1). Can‘t operate.

2024-03-28 09:55:09 michael007js 29

使用`systemctl`命令报错:System has not been booted with systemd as init system (PID 1). Can‘t operate.


一、问题概述

Windows中使用WSLCentOS时,使用systemctl命令报错:
System has not been booted with systemd as init system (PID 1). Can’t operate.

[root@GC Administrator]# systemctl start dockerSystem has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

二、原因分析

这是因为这个CentOS系统并没有使用systemd,可能使用的是SysV init(sysvinit)初始化系统。
可以通过如下命令查看:

[root@GC Administrator]# ps -p 1
    PID TTY          TIME CMD      1 ?        00:00:00 init(CentOS8)

其中 CMD 列,显示 init,可以确定使用的是SysV init初始化系统。

什么是Systemd?
SystemdLinux系统的一套基本构建模块。它提供了一个系统和服务管理器,作为PID 1运行并启动系统的其余部分。
systemctl作为systemd的一个工具,提供与Linux机器上的服务交互

三、问题解决

如何解决这个问题,网上有一堆方案(有些过时了,有些是直接放弃使用systemctl,改用别的命令替代,好不好使我没试,下面给出我的解决方案,当然也是来源网上的)

解决方案:在WSL的CentOS中启用systemd

先决条件:
确保运行的是来自 Microsoft Store 且版本号为0.67.6及以上版本的WSL
可以通过wsl --version命令来查看版本

C:\Users\Administrator>wsl --version命令行选项无效: --version

如上,提示--version命令行选项无效。则说明你使用的wsl版本号过低,或者你的wsl使用不是来自Microsoft Store,而是Windows内置的wsl

你需要通过wsl --update,将wsl升级到Microsoft Store的最新版本。

C:\Users\Administrator>wsl --update正在安装: 适用于 Linux 的 Windows 子系统已安装 适用于 Linux 的 Windows 子系统。

如果你还没有安装任何wsl,你可以使用wsl --install命令进行安装,当然wsl的安装对操作系统有要求,详见官网:安装 WSL

WSL升级完成后,就可以使用--version参数了

C:\Users\Administrator>wsl --version
WSL 版本: 1.2.5.0内核版本: 5.15.90.1WSLg 版本: 1.0.51MSRDC 版本: 1.2.3770Direct3D 版本: 1.608.2-61064218DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.19045.3208

在CentOS实例中,添加/etc/wsl.conf文件,并编辑内容如下:

C:\Users\Administrator>wsl -d CentOS8
[root@GC Administrator]# vi /etc/wsl.conf[root@GC Administrator]# cat /etc/wsl.conf[boot]
systemd=true

然后使用wsl --shutdown命令,将运行中的Linux发行版关闭。
重新运行CentOS。
再次查看初始化信息,可以看出已经使用了systemd
并且systemctl命令已可正常使用

C:\Users\Administrator>wsl --shutdown

C:\Users\Administrator>wsl -d CentOS8
[root@GC Administrator]# ps -p 1
    PID TTY          TIME CMD      1 ?        00:00:00 systemd
      
[root@GC Administrator]# systemctl start docker[root@GC Administrator]# docker --versionDocker version 24.0.5, build ced0996


首页
关于博主
我的博客
搜索