系统尚未使用 systemd 作为 init system (PID 1) 引导。无法操作[关闭]

Posted

技术标签:

【中文标题】系统尚未使用 systemd 作为 init system (PID 1) 引导。无法操作[关闭]【英文标题】:WSL Redis encountered System has not been booted with systemd as init system (PID 1). Can't operate [closed] 【发布时间】:2019-02-11 07:32:42 【问题描述】:

我正在尝试遵循数字海洋的article 中讨论的 Redis 安装过程,用于 WSL(适用于 Linux 的 Windows 子系统)。安装的 Ubuntu 版本是 Ubuntu 18.04。

redis 安装中的一切都很好,但是当我尝试运行这个 sudo systemctl start redis 时,我收到了这条消息。

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

关于我应该如何处理的任何想法?

【问题讨论】:

按照这个方法github.com/Microsoft/WSL/issues/365 【参考方案1】:

改为使用:sudo service redis-server start

我遇到了同样的问题,在 WSL 上从 Ubuntu 中停止/启动其他服务。这行得通,而 systemctl 没有。

人们可能会想,“你怎么知道服务名称是‘redis-server’?”您可以使用service --status-all查看它们

【讨论】:

是的.. 自从我写了这个问题后,我也一直在使用它,评论中的那个也有帮助的评论 太好了,非常感谢。这适用于大多数已安装在 WSL 环境中的服务,而我们不能使用 systemctl 来启动|停止|重新启动服务。 鉴于这是评分最高的答案,很高兴看到更多信息在这里发生的事情。据我了解,service 是一种抽象,可以回退到init.d (sysv init) 或systemd,正如问题所暗示的那样不起作用。 serverfault.com/questions/867322/… fraleone,既然这是我的回答,我会尽力解决您的问题。需要明确的是,问题是关于尝试启动 Redis 的错误(特别是在 WSL 上),其中使用其他地方记录的通用启动命令 systemctl start redis 不适用于 OP。它也不适合我。我找到了这个替代方案 (redis-server start) 并来到这里提供它作为答案。我很高兴它帮助了其他人。但我无法/无法解释“这里发生了什么”,或者为什么它与您的期望相反。您可能会发现更多,或者其他人可能会发现,请随意详细说明。 您也可以在启动时从“.profile”调用所需的命令,请参阅 docker “sudo systemctl enable docker” not available: Automatically run Docker at boot on WSL2 (using a “sysvinit” / “init” command or a workaround) 的类似问题,这也详细解释了为什么您需要在此处使用“服务” systemd 的。【参考方案2】:

而不是使用

sudo systemctl start redis

使用:

sudo /etc/init.d/redis start

目前我们在 WSL 中没有 systemd

或者有时可能是redis-server,例如:

>> sudo /etc/init.d/redis-server start
Starting redis-server: redis-server.

只需做一个ls,比如:ls /etc/init.d

【讨论】:

你知道它是否适用于 WLS 2 吗? 通过快速搜索,WSL2 未使用 systemd 启动。这里有一个解决方法,虽然我没有测试过。 github.com/microsoft/WSL/issues/994#issuecomment-502055417 我如何在 fedora / centos 镜像中使用它。【参考方案3】:

我在运行 WSL 2 时遇到了这个问题

解决方案是命令

 $ sudo dockerd

如果之后您仍然有权限问题,请运行命令:

 $ sudo usermod -aG docker your-user

【讨论】:

您还必须启动发行版。所以我有 2 个终端,一个运行 docker,另一个用于工作 你可以使用“sudo dockerd &”,你不需要2个终端。 我收到sudo: dockerd: command not found【参考方案4】:

我试图在 ubuntu 和 WSL 中启动 Docker。

这对我有用,

sudo service docker start

【讨论】:

【参考方案5】:

如果您使用的是 Docker,您可以使用以下命令尝试具有系统 D 的 Ubuntu 的映像:

docker run -d --name redis --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro jrei/systemd-ubuntu:18.04

然后你只需要运行:

docker exec -it redis /bin/bash

你可以在那里安装 Redis,启动它,重新启动它或任何你需要的东西。

【讨论】:

Docker 不会在 WSL 中运行。 @Aditya 它在 WLS 2 中实现【参考方案6】:

对于 WSL2,我必须安装 cgroupfs-mount,而不是启动守护进程,如 here 所述:

sudo apt-get install cgroupfs-mount
sudo cgroupfs-mount
sudo service docker start

【讨论】:

【参考方案7】:

这里的总新手 - 在尝试了上述大多数建议之后,对我有用的命令是 sudo service apache2 --full-restart 并且网络服务器启动了。

可能出现错误是因为我在没有重新启动/重新启动的情况下按照大量设置说明进行操作。我正在使用 Apache2 Debian 在 WSL2 中开发 Ubuntu 20.04。

【讨论】:

【参考方案8】:

这对我有用(使用 WSL)

sudo /etc/init.d/redis start

(对于任何其他服务,请检查 init.d 文件夹中的文件名)

【讨论】:

【参考方案9】:

使用此命令运行每个服务 只需编写名称服务即可:

对于 xrdp

sudo /etc/init.d/xrdp start

对于redis

sudo /etc/init.d/redis start

(对于任何其他服务,请检查 init.d 文件夹中的文件名)

【讨论】:

以上是关于系统尚未使用 systemd 作为 init system (PID 1) 引导。无法操作[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Systemd管理

Linux守护进程之systemd

linux系统开机自启动:init upstart systemd

systemd 和 init

最简明的 Systemd 进程管理教程,搞懂只需10分钟~

最简明的 Systemd 进程管理教程,搞懂只需10分钟~