我发现自己陷入了一个相当荒谬的困境。在过去的某个时候,我安装了一个软件(ejabberd,如果你好奇的话,但我认为哪个并不重要),它试图当我启动机器时就启动。很久以后,在使用 Erlang/OTP(ejabberd 启动所依赖的)时,我发现了一种更好的(用于开发)在计算机上安装 Erlang 的方法,因此我卸载了之前安装的方法(通过 apt-get install )。后来,在玩一些东西时,我注意到 erl - 用于启动 Erlang 虚拟机的二进制文件以及其他东西 - 仍然位于我的 /usr/bin 中。 “啊,” - 我想 - “我不需要愚蠢的事情, apt-get remove 没有做好清理工作, sudo rm -rf!”...
...哎呀!
现在,当我尝试启动时,我看到一长行:
/usr/sbin/ejabberdctl: 60: exec: /usr/bin/erl: 未找到
无法启动 - 无法卸载。我可以中断启动过程并看到更改启动选项和 BIOS 设置的选项 - 但不知道这些是否以及如何帮助我解决问题。有什么想法吗?非常感谢!
答案1
从其他介质启动,例如从 USB 记忆棒启动。假设您使用的是 Debian 或 Ubuntu,这可能适用于该发行版的安装映像(您可以进入 shell),或者您可以使用类似的东西系统救援光盘(除了名称之外,还可以从各种媒体启动,包括通过 PXE 进行网络启动)。
启动并进入 shell 后,安装硬盘的系统分区。检查你的损坏rm -rf
(你没有说你在哪个目录中这样做)。
如果事情很简单,你可以解决,那就解决它。否则,您可能需要重新安装系统的(小或大)部分。如果您需要进行完整安装,您可以在执行此操作之前保存已安装在其他位置的软件包列表(请参阅/var/lib/dpkg/status
),以便您可以将系统恢复到原来的状态。 从发行版的安装映像启动可能对此很方便。
答案2
无法启动的单个非关键服务(例如 XMPP 守护程序)不应阻止整个服务器的启动。可能还有其他更重要的事情你没有看到。
但一次只有一个问题。目前,您应该正确地重新安装erlang-base
(包含的软件包/usr/bin/erl
):
apt-get install --reinstall erlang-base