如何解决“系统未使用systemd作为init系统(PID 1)启动。”的问题?我无法重新启动Ubuntu。

我在设置Apache时遇到了问题。我使用的是Ubuntu 18.04版本。我不知道是什么导致了这个问题的出现...
我将列出所有我的命令。
apt-get update
apt-get upgrade

我在尝试升级后看到了一个错误:
E: Sub-process /usr/bin/dpkg returned an error code (1) 

我使用了以下一些命令来解决它或找到解决方案:
vi usr/sbin/policy-rc.d

内容:

#!bin/sh
exit 101

chmod +x /usr/sbin/policy-rc.d
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

这些来自于这份文档
apt-get install apache2
apt-get install php
apt-get install libapache2-mod-php
apt-get install php-mbstring
apt-get install php-gd
apt-get install php-curl php-xml
apt-get install mariadb-server
/usr/bin/mysql_secure_installation

use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
apt-get install php-mysql

adduser

a2ensite

我下载了phpmyadmin。
在执行完所有这些命令后,我想重启Ubuntu,但是没有成功。 在执行reboot命令后,我看到了如下的一条消息:
System has not been booted with systemd as init system (PID 1). Can't 
operate. Failed to talk to init daemon.

对于reboot -f命令:
Rebooting.
Failed to reboot: Invalid argument

我是一个完全的新手... 我不知道我应该做什么。
我刚刚重新安装了Ubuntu,尽管我除了重新安装后尝试了一下重启之外,什么都没做,但我收到了上面提到的相同的消息。

1你试过用 sudo shutdown -r now 吗? - Denny John
1是的,我试过了,也不起作用。我收到了同样的消息:系统没有使用systemd作为init系统(PID 1)进行引导。无法操作。无法与init守护进程通信。 - user844006
你在使用WSL吗?我不确定WSL是否允许这样做。(有趣的是,在我的Windows 7上,我可以在Babun中执行reboot命令,它确实会重新启动Windows!) - Melebius
如果WSL代表“Windows子系统用于Linux”,是的,我正在使用它... - user844006
我在Ubuntu升级至18.04 LTS版本后出现了这个错误。有什么想法吗? - Roy Tinker
3个回答

我在尝试使用Docker的Linux安装指南(链接1:https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04)或(链接2:https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1)时遇到了类似的问题。
解决方法是使用Windows的安装过程来安装Docker,然后将您的Windows子系统与Windows Docker进行链接。据我所知,失败的原因是Windows子系统无法访问Docker所需的文件,这些文件最终位于Windows上。这个解决方案绕过了这个问题。希望对您有所帮助!

https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/


你的评论让我茅塞顿开:),然后我仔细阅读了整个帖子,发现https://stackoverflow.com/a/61902994/4582240 这个链接也对我有所帮助。如果我不确定关键问题是缺少“Docker Desktop”,我就不会去追随那个链接。 - soMuchToLearnAndShare

如果您正在使用Docker,您可以尝试使用已经启用了System D的Ubuntu镜像,使用以下命令:
docker run -d --name systemd-ubuntu --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro jrei/systemd-ubuntu
然后只需运行以下命令:
docker exec -it systemd-ubuntu /bin/bash
这样您就可以安装、启动和重启任何所需的服务。

我遇到了同样的问题,不小心删除了/bin/bash文件。之后我的服务器无法启动。
我挂载了一个旧的备份,并从挂载的驱动器中复制了bash文件。卸载后,一切都正常,只是当我运行df命令时,挂载的驱动器仍然出现。
我强制卸载了先前挂载的备份,结果陷入了同样的问题。
尝试以下操作:
bash --login
exec bash 
bash --login; exit

这是我的来源:

https://superuser.com/questions/353723/how-do-i-reload-the-terminal-in-ubuntu

此外,我还安装了aptitude并运行了aptitude reinstall bash
虽然我无法确切地说是什么解决了问题,但现在问题已经解决了,我可以像往常一样进行ssh连接。