Linux

如何設置核心轉儲文件位置(和名稱)?

  • July 25, 2019

我在 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。有兩種方法可以解決這個問題:

  1. 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
  1. 停止 abrtd 服務。kernel.core_pattern不會被覆蓋。- (我從未測試過)。

引用自:https://unix.stackexchange.com/questions/192716