Linux
如何設置核心轉儲文件位置(和名稱)?
我在 CentOS 6 上,試圖為我正在開發的應用程序啟用核心轉儲。我放了:
ulimit -H -c unlimited >/dev/null ulimit -S -c unlimited >/dev/null
進入我的 bash 配置文件,但仍然沒有生成核心轉儲(在新終端中)。
我還更改了我的 /etc/security/limits.conf 以便所有使用者的軟限制為零。
如何設置要輸出的核心文件的位置?我想指定位置並附加生成轉儲的時間,作為文件名的一部分?
要在 CentOS 6 中設置核心轉儲的位置,您可以編輯
/etc/sysctl.conf
. 例如,如果您想要核心轉儲/var/crash
:kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t
其中變數是:
%e是文件名
%g是程序執行的 gid
%p是程序的 pid
%s是導致轉儲的信號
%t是轉儲發生的時間
%u是程序執行的 uid
你也必須添加
/etc/sysconfig/init
DAEMON_COREFILE_LIMIT='unlimited'
現在應用新的更改:
$ sysctl -p
但是這種方式有一個警告。如果核心參數 kernel.core_pattern 在重新啟動時始終重置並覆蓋為以下配置,即使在以下配置中手動指定了值
/etc/sysctl.conf
:|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
總之,
abrtd.service
啟動時kernel.core_pattern
會被安裝的系統自動覆蓋abrt-addon-ccpp
。有兩種方法可以解決這個問題:
DumpLocation
在/etc/abrt/abrt.conf
配置文件中設置選項。目標目錄可以通過/var/crash
在/etc/abrt/abrt.conf
配置文件中設置 DumpLocation= 來指定,sysctl kernel.core_pattern
顯示的值是一樣的,但實際上核心文件會創建到/var/crash
.此外,如果您啟用了 SELinux,則必須執行:
$ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?" $ setsebool -P abrt_anon_write 1
最後重新啟動
abrtd.service
:$ service abrtd.service restart
- 停止 abrtd 服務。
kernel.core_pattern
不會被覆蓋。- (我從未測試過)。