System has not been booted with systemd as init system (PID 1). Can't operate.
发生此错误的原因是 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:
- 您正在使用 WSL(Windows Subsystem for Linux)中的 Linux 系统。
- 您已经跳过了初始化进程(/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_name | chkconfig service_name on |
系统CTL禁用service_name | chkconfig service_name关闭 |
方式 2.在命令中添加 /sbin/init
现代Linux系统允许用户跳过初始化过程。例如,如果在引导加载程序环境中执行命令“init=/bin/bash”,系统将启动单用户根 shell 环境,不需要用户密码。
在此环境中,所有命令都使用默认路径 /bin/bash 执行。在这种情况下,你应该使用 /sbin/init 来替换 /bin/bash。
方式 3.使用脚本启用systemd
若要始终在 WSL2 上启用 systemd,可以从 diddledani 应用脚本。单击该链接,它将向您展示如何逐步完成该工作。有些人报告说它对他们有用。