Gentoo 的 openrc 永远挂在“缓存服务依赖项...”中

Gentoo 的 openrc 永远挂在“缓存服务依赖项...”中

每当我启动我的 gentoo 笔记本电脑时,openrc 就会永远挂在“缓存服务依赖项...”阶段。这会导致我的计算机无法启动,除非我使用 sysrq 键来终止它并手动启动系统。

作为ps诊断工具,我发现grepcut程序(脚本的子级gendepends.sh)挂起,CPU 使用率为 0%。终止这些程序可以让启动过程在调用openrc default.

无论如何,我可以使用很多方法来解决这个问题,但我想知道最可能的原因并正确解决它。

这是当我尝试手动解决依赖项时 pstree 的相关输出:

  |                       |   `-doas /lib/rc/bin/rc-depend -u
  |                       |       `-rc-depend -u
  |                       |           `-gendepends.sh /lib64/rc/sh/gendepends.sh
  |                       |               `-gendepends.sh /lib64/rc/sh/gendepends.sh
  |                       |                   `-gendepends.sh /lib64/rc/sh/gendepends.sh
  |                       |                       |-cut -d = -f 2
  |                       |                       |-grep pid
  |                       |                       |-tr -d \\"
  |                       |                       `-tr -d [:space:]

在 中gendepends.sh,这些命令没有在任何地方提到,所以我假设它们是从它来源的另一个脚本调用的。

编辑: 我现在已经解决这个问题了。事实证明,这是由具有无法解析的依赖项的旧初始化脚本引起的,由于某种原因,该脚本仍然位于我的 initscripts 目录中。删除脚本解决了问题。感谢您的建议。

答案1

这些命令不会凭空出现;它们一定是由某些初始化脚本调用的,但可能使用了错误的参数或期望不存在的数据。我可以想象他们等待一些未提供的输入。

在输出中,ps -ef您可以找到父进程的 ID (PPID),这可能是罪魁祸首;您也可以尝试pstree获得更好的概览。尝试找出调用命令的脚本行,也许您可​​以找出该进程以及整个启动过程挂起的原因。

如果您无法指出问题,则将 的输出添加ps -ef到您的问题中(您可以将其缩短为挂起命令及其父级,最多 PID 0),以及 init 脚本(如果涉及)。

相关内容