每当我启动我的 gentoo 笔记本电脑时,openrc 就会永远挂在“缓存服务依赖项...”阶段。这会导致我的计算机无法启动,除非我使用 sysrq 键来终止它并手动启动系统。
作为ps
诊断工具,我发现grep
和cut
程序(脚本的子级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 脚本(如果涉及)。