处理 man-db 的触发器

处理 man-db 的触发器

运行 sudo aptitude upgrade 时,几乎每次软件包升级后控制台都会长时间冻结,并显示一条消息“正在处理 man-db 触发器...”。这可能是什么问题?我该如何修复?

Ubuntu 版本:12.04(服务器和 Xubuntu)

提前致谢。


更新:经过进一步测试,这个问题似乎与 autofs 软件包有关。删除 autofs 解决了问题。不知道为什么。然后我必须对我的文件系统使用软链接而不是 autofs 来避免这个问题(以及这里发布的另外两个问题)。

答案1

Processing triggers for man-db仅当文件存在时才会执行此步骤/var/lib/man-db/auto-update。这是一个空文件,其唯一目的是控制此行为,因此可以安全地删除它以禁用这个耗时且可能不必要的过程。

我个人在所有系统上都禁用了此触发器。虽然 man-db 缓存应该可以提高手册页系统的速度和功能,但在禁用触发器后,我并没有遇到任何明显的性能下降或功能问题。

答案2

警告:运行以下命令将删除 Ubuntu 的组成部分,例如使用命令阅读手册页的能力man以及相关实用程序(例如apropos和 )whatis。此外,它还会删除ubuntu-standard元包,这反过来会将其他数量的包标记为手动安装。请谨慎遵循此建议。

可能对某些人有帮助:我经常在我们的 CI 上遇到这个问题。

只需执行以下操作:

sudo apt-get remove --purge man-db

该命令将完全删除 man-db 包,在我们的 CI 示例中,该包完全没用。

答案3

mandb 索引可能已损坏。

检查索引并重新创建

sudo mandb -t
rm -rf /var/cache/man
sudo mandb -c

答案4

man-db 更新触发器由 debconf 中的一个隐藏标志控制,该标志缓存在路径中的文件系统上/var/lib/man-db/auto-update。该缓存标志文件从此处 man-db postinst 脚本中的 debconf 数据库同步:https://sources.debian.org/src/man-db/2.11.2-2/debian/postinst/#L70-L79

切换 man-db 自动更新标志的正确方法是更改​​ debconf 数据库中的值man-db/auto-updatefalse然后重新运行将值同步到磁盘的 man-db postinst 脚本。以 root 身份运行以下命令:

echo "set man-db/auto-update false" | debconf-communicate; dpkg-reconfigure man-db

此标志最初是为了避免在 Debian/Ubuntu 构建守护进程上重建 man-db 数据库而引入的;请参阅 Debian 错误554914579075了解详情。

相关内容