- 在 CentOS/RHEL 中,默认情况下禁用核心文件创建。
要启用它,请执行以下命令:
# ulimit -S -c unlimited > /dev/null 2>&1
然后在同一个shell环境中执行程序。
- 要永久启用,请按照以下步骤操作:
编辑 /etc/security/limits.conf 。
# vi /etc/security/limits.conf * soft core unlimited
'*' 用于使核心转储大小不受所有用户的限制。
编辑/etc/sysctl.conf,添加core dump的路径和core文件的文件格式。
默认情况下,core文件会生成在运行进程的工作目录下。
# vi /etc/sysctl.conf kernel.core_pattern = /var/crash/core.%e.%p.%h.%t
其中:
/var/crash是路径,core.%e.%p.%h.%t 是文件格式,其中:
%e可执行文件名。
%p转储进程的 PID。
%t转储时间(自 1970 年 1 月 1 日 0:00 起的秒数)。
%h主机名(与 uname(2) 返回的“节点名”相同)。
确保进程对配置的目录(例如 /var/carsh/)具有正确的权限。
为 setuid 或者其他受保护/污染的二进制文件设置 fs.suid_dumpable。
# vi /etc/sysctl.conf fs.suid_dumpable = 2
以下是每个预定义值的含义:
- 0 -(默认):传统行为。任何已更改权限级别或者仅执行的进程都不会被转储。
- 1 -(调试):所有进程尽可能转储核心。核心转储归当前用户所有,并且不应用任何安全性。这仅适用于系统调试情况。
- 2 - (suidsafe) : 任何通常不被转储的二进制文件都被转储为只有 root 可读。这允许最终用户删除这样的转储,但不能直接访问它。出于安全原因,此模式下的核心转储不会相互覆盖或者覆盖其他文件。当管理员尝试在正常环境中调试问题时,此模式是合适的。
修改下面的 /etc/sysctl.conf 后,使用下面的 sysctl 命令加载设置:
# sysctl -p
要从未签名的包中收集核心转储,请在 /etc/abrt/abrt-action-save-package-data.conf 中设置 OpenGPGCheck = no。
要从未打包的软件中收集核心转储,请在 /etc/abrt/abrt-action-save-package-data.conf 中设置 ProcessUnpackaged = yes
以 root 身份重新启动 abrtd 守护程序以使新设置生效。
# service abrtd restart # service abrt-ccpp restart
在 CentOS/RHEL 7 中:
# systemctl start abrtd.service # systemctl start abrt-ccpp.service
现在,当进程因段错误而放弃时,CentOS/RHEL 已准备好生成核心转储文件。
注意:CentOS/RHEL 不支持 Red Hat Automatic Bug Reporting Tool (ABRT) 提供的守护进程和功能。
ABRT 包和相关文件(例如 libreport)包含在发行版中以满足包依赖性,但不支持这些包中的功能。