我在 CentOS 6 上,试图为我正在开发的应用程序启用核心转储。我已经把:
ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null
Run Code Online (Sandbox Code Playgroud)
在我的 bash 配置文件中,但仍未生成核心转储(在新终端中)。
我还更改了我的 /etc/security/limits.conf 以便所有用户的软限制为零。
如何设置要输出的核心文件的位置?我想指定位置并附加生成转储的时间,作为文件名的一部分?
tal*_*zin 31
要在 CentOS 6 中设置核心转储的位置,您可以编辑/etc/sysctl.conf
. 例如,如果您想在/var/crash
以下位置进行核心转储:
kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t
Run Code Online (Sandbox Code Playgroud)
其中变量是:
%e是文件名
%g是进程在下运行的 gid
%p是进程的 pid
%s是导致转储的信号
%t是转储发生的时间
%u是进程正在运行的 uid
你也必须添加 /etc/sysconfig/init
DAEMON_COREFILE_LIMIT='unlimited'
Run Code Online (Sandbox Code Playgroud)
现在应用新的更改:
$ sysctl -p
Run Code Online (Sandbox Code Playgroud)
但这种方式有一个警告。如果内核参数 kernel.core_pattern 在重新启动时始终重置并覆盖为以下配置,即使在 中手动指定了值 /etc/sysctl.conf
:
|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
Run Code Online (Sandbox Code Playgroud)
简而言之,当abrtd.service
启动时kernel.core_pattern
被安装的系统自动覆盖abrt-addon-ccpp
。有两种方法可以解决这个问题:
配置文件DumpLocation
中的设置选项/etc/abrt/abrt.conf
。目的目录可以通过/var/crash
在/etc/abrt/abrt.conf
配置文件中设置DumpLocation=来指定,sysctl kernel.core_pattern
显示的值是一样的,但实际上会创建core文件到/var/crash
.
此外,如果您启用了 SELinux,则必须运行:
$ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?"
$ setsebool -P abrt_anon_write 1
Run Code Online (Sandbox Code Playgroud)
最后重新启动abrtd.service
:
$ service abrtd.service restart
Run Code Online (Sandbox Code Playgroud)停止 abrtd 服务。kernel.core_pattern
不会被覆盖。- (我从未测试过)。
归档时间: |
|
查看次数: |
89920 次 |
最近记录: |