我使用的是 Red Hat Enterprise Linux Server 版本 5。在此版本中,每当用户进程由于分段错误而崩溃时,它都不会记录在 /var/log/messages 中。甚至 dmesg 也不会显示与此相关的任何消息。
而在另一个发行版(Cent OS 5)中,每当我的用户进程崩溃时,我都会在 /var/log/messages 中看到段错误消息。dmesg 也会显示段错误。
是否有任何设置可以启用,以便将段错误记录到 /var/log/messages 中。
我交叉检查了两个系统的 /etc/syslog.conf。两者都是相同的,甚至 /etc/sysconfig/syslog 文件也是如此。
现在我检查了内核源代码 arch/x86/mm/fault.c,发现只有 2.6.23 及以后的版本才会将 segfault 的错误信息打印到 /var/log/messages 中。因为 RHEL5.4 使用的是 2.6.18 内核,所以无法将这些信息记录到系统日志中。
答案1
至少我们可以将内核的控制设置kernel.print-fatal-signals
为 1,然后获得相当详细的日志报告:
[1157230.882024] Process m (pid: 1042531, veid: 0, threadinfo ffff8804dac20000, task ffff880667b6f070)
[1157230.882137]
[1157230.882190] Call Trace:
[1157812.633292] hostname.here/1045982: potentially unexpected fatal signal 11.
…
答案2
kern.info
据我所知,在 syslog.conf 中应该匹配。
*.info -/var/log/messages
我的 syslog.conf 中有内容,它肯定会messages
在 rhel5.6(仍为 2.6.18)上打印段错误:
Jun 27 09:25:00 rhel5-x86-64 kernel: a.out[7527]: segfault at 0000000000000000 rip 0000000000400444 rsp 00007fff1d417460 error 6
答案3
我认为您需要 abrt。这将生成日志、发送电子邮件、针对 cpp、python 和内核崩溃的崩溃/中止生成 ureport。