在CentOS 7的运维与管理过程中,系统的稳定性与可靠性是至关重要的,当应用程序或系统内核意外崩溃时,快速、准确地定位问题根源是解决问题的关键,ABRT(Automatic Bug Reporting Tool)正是为此而生的一款强大工具,它能够自动捕获崩溃信息,并生成详细的报告,虽然ABRT提供了图形界面,但在服务器环境或需要自动化处理的场景下,命令行界面(CLI)则显得更为高效和灵活,本文将深入探讨在CentOS 7中如何使用ABRT的命令行工具abrt-cli,以实现系统崩溃的捕获、分析、报告与管理。

ABRT CLI简介与核心概念
ABRT是一个守护进程集合,它监控系统上运行的应用程序,当检测到应用程序崩溃(如段错误)时,它会收集与该崩溃相关的各类数据,包括核心转储文件、可执行文件路径、命令行参数、环境变量、堆栈跟踪等,并将这些信息组织成一个结构化的“问题目录”,存储在/var/spool/abrt/下。
abrt-cli是与这些已捕获的崩溃数据进行交互的主要命令行工具,它允许系统管理员列出、查看、分析、报告以及删除这些崩溃记录,而无需依赖任何图形组件,对于远程服务器或无头环境的管理员来说,abrt-cli是诊断问题的得力助手。
常用abrt-cli命令详解
掌握abrt-cli的核心命令是高效利用ABRT的前提,以下是一些最常用且功能强大的命令,它们构成了崩溃处理工作流的基础。
列出崩溃记录
当系统发生崩溃后,首先要做的就是查看ABRT捕获到了哪些问题,使用list命令可以轻松实现这一点。
abrt-cli list
该命令会输出一个简洁的列表,包含每个崩溃记录的基本信息,如ID、时间、可执行文件名和崩溃原因,若要获取更详细的信息,可以使用--full选项:
abrt-cli list --full
--full选项会显示更多的元数据,例如崩溃次数、用户ID、包名和版本等,为初步判断问题提供了更丰富的上下文。
查看崩溃详情
在列出的崩溃记录中,每个条目都有一个唯一的ID(通常是ccpp-或python-开头后跟一串哈希值),要深入了解某个特定崩溃的详细情况,可以使用info命令。
abrt-cli info <CRASH_ID>
要查看ID为ccpp-2025-10-27-10:30:15-1234-0的崩溃详情:
abrt-cli info ccpp-2025-10-27-10:30:15-1234-0
该命令会以人类可读的格式打印出该崩溃的所有可用信息,包括:

- 命令行: 导致崩溃的程序启动时所用的完整命令。
- 组件: 崩溃所属的软件包。
- 可执行文件: 崩溃程序的绝对路径。
- 崩溃原因: 导致崩溃的信号,如
SIGSEGV(段错误)。 - 堆栈跟踪: 这是最关键的信息之一,显示了程序崩溃时的函数调用链,是定位代码问题的核心依据。
- 核心转储: 如果配置了生成核心转储,这里会显示其路径。
分析崩溃数据
在报告问题之前,有时需要对崩溃数据进行进一步的分析,以生成更有用的信息,如去重哈希值。analyze命令会触发ABRT的分析插件。
abrt-cli analyze <CRASH_ID>
这个命令通常会运行coredump等分析器,处理核心转储文件,并可能更新该崩溃记录中的信息,例如生成一个duphash,这个哈希值用于识别重复的崩溃,帮助开发人员将同一个Bug的多个报告聚合在一起。
报告崩溃
report命令是将崩溃信息提交给开发者或Bug追踪系统(如Bugzilla)的最后一步。
abrt-cli report <CRASH_ID>
执行此命令后,abrt-cli会调用默认的报告程序,通常会启动一个文本编辑器(如vi或nano,由$EDITOR环境变量决定),让你查看即将报告的内容,并添加“如何复现”或“对问题的描述”等信息,保存并退出编辑器后,ABRT会根据其配置(位于/etc/libreport/events.d/目录下)将报告发送到预设的目标,例如Red Hat的客户支持系统或公共的Bugzilla。
你可以通过配置/etc/libreport/plugins/bugzilla.conf等文件来设置报告的目标账户。
删除崩溃记录
处理完一个崩溃(无论是已报告还是确认为无关问题)后,为了释放磁盘空间并保持列表整洁,应该将其删除。
abrt-cli delete <CRASH_ID>
该命令会从/var/spool/abrt/目录中彻底移除指定的崩溃目录。
典型工作流程与命令小编总结
在实际操作中,一个典型的崩溃处理流程如下:
- 发现问题: 应用程序无响应或系统日志显示崩溃信息。
- 列出崩溃: 运行
abrt-cli list查看是否有新的崩溃记录。 - 获取详情: 使用
abrt-cli info <ID>查看堆栈跟踪等信息,判断问题严重性。 - 分析与报告: 运行
abrt-cli report <ID>,填写描述并提交报告。 - 清理: 使用
abrt-cli delete <ID>删除已处理的记录。
为了方便快速查阅,下表小编总结了核心的abrt-cli命令:

| 命令 | 描述 | 示例 |
|---|---|---|
list 或 ls |
列出所有未处理的崩溃记录 | abrt-cli list --full |
info |
显示指定崩溃ID的详细信息 | abrt-cli info ccpp-xxxx |
analyze |
对崩溃数据运行分析插件 | abrt-cli analyze python-xxxx |
report |
将崩溃报告提交到Bug追踪系统 | abrt-cli report ccpp-xxxx |
delete 或 rm |
删除指定的崩溃记录 | abrt-cli delete ccpp-xxxx |
相关问答FAQs
问题1:我如何配置ABRT忽略特定应用程序的崩溃?
解答: 有时,某些不关键或已知有问题的应用程序频繁崩溃,会产生大量噪音报告,此时可以配置ABRT忽略它们,主要通过编辑ABRT的主配置文件/etc/abrt/abrt.conf来实现,在该文件中,找到Blacklist和Whitelist选项。Blacklist是一个用逗号分隔的可执行文件名列表,ABRT将忽略列表中程序的崩溃,要忽略名为my-buggy-app的程序,可以设置:
Blacklist = my-buggy-app, another-ignored-process
修改后,需要重启ABRT守护进程使配置生效:systemctl restart abrtd。
问题2:ABRT的崩溃数据存储在哪里?如何管理它们占用的磁盘空间?
解答: ABRT捕获的所有崩溃数据都默认存储在/var/spool/abrt/目录下,每个崩溃都会创建一个以其类型和时间戳命名的子目录,里面包含了所有相关文件(如coredump、backtrace等),随着时间推移,这些文件可能会占用大量磁盘空间。
管理磁盘空间的方法有几种:
- 手动清理: 定期使用
abrt-cli list查看旧的或已处理的崩溃,并用abrt-cli delete <ID>手动删除。 - 自动清理: ABRT本身可以配置自动删除旧的崩溃数据,在
/etc/abrt/abrt.conf文件中,MaxCrashReportsSize选项可以设置/var/spool/abrt/目录的最大容量(单位为MB),超过此限制时会自动删除最旧的崩溃。 - 利用Cron Job: 可以创建一个cron任务,定期执行清理脚本,一个简单的脚本可以找到并删除超过30天的所有崩溃目录,这样可以实现更灵活的自动化管理。