System has not been booted with systemd as init system (PID 1). Can't operate.

2023-09-18 13:48:37
295

发生此错误的原因是 Linux 系统未使用systemd作为初始化系统。众所周知,Linux系统的启动过程如下:

  • 打开PC电源,它将激活BIOS。
  • BIOS 将读取 MBR 以查找引导加载程序。
  • 引导加载程序将加载系统内核,系统内核将管理计算机的硬件资源并充当软件和硬件之间的接口。
  • 然后内核将激活一个init进程(其进程ID为1),这是系统的第一个进程。它负责生成所有其他用户进程。init 进程非常独特,可以完成其他进程无法完成的任务。

那么,什么是初始化系统?Init 系统可以定义、管理和控制 init 进程的行为。并负责组织和运行许多独立或相关的初始化任务,使计算机系统能够顺利进入一定的用户订阅操作模式。

Linux系统有许多初始化系统,如System III,System V,Upstart等。但自 2015 年以来,大多数 Linux 发行版都采用了systemd来取代那些传统的 init 系统。此外,systemd 向后兼容系统 V。

但是,在以下两种情况下,默认情况下不会启用systemd:

  1. 您正在使用 WSL(Windows Subsystem for Linux)中的 Linux 系统。
  2. 您已经跳过了初始化进程(/sbin/init)。

 

方式 1.使用等效的sysvinit命令

如果通过 WSL 运行 Linux 系统,Linux 系统将使用 System V init 系统,而不是systemd。在这种情况下,您无法运行systemd命令,但可以运行等效的Sysvinit命令。

提示:命令“ps -p 1 -o comm=”将帮助您了解正在使用的初始化系统。

此表可能会对您有所帮助。

系统命令Sysvinit 命令
系统CTL启动service_name服务service_name启动
系统CTL停止service_name服务service_name站
系统CTL重新启动service_name服务service_name重新启动
系统CTL状态service_name服务service_name状态
系统CTL启用service_namechkconfig service_name on
系统CTL禁用service_namechkconfig service_name关闭

 

方式 2.在命令中添加 /sbin/init

现代Linux系统允许用户跳过初始化过程。例如,如果在引导加载程序环境中执行命令“init=/bin/bash”,系统将启动单用户根 shell 环境,不需要用户密码。

在此环境中,所有命令都使用默认路径 /bin/bash 执行。在这种情况下,你应该使用 /sbin/init 来替换 /bin/bash

 

方式 3.使用脚本启用systemd

若要始终在 WSL2 上启用 systemd,可以从 diddledani 应用脚本。单击该链接,它将向您展示如何逐步完成该工作。有些人报告说它对他们有用。