Không có kết xuất lõi sau khi nâng cấp gần đây lên systemd?


12

Khi tôi thực hiện một chương trình mà tôi làm việc, nó không thành công với thông báo sau:

...
Aborted (core dumped)

Tuy nhiên, không có kết xuất lõi được tạo ra. Các bãi rác cốt lõi đã được viết trước đây và tôi không nhớ rằng tôi đã thay đổi bất cứ điều gì liên quan đến nó.

Khi tôi chạy ulimit -atôi trở lại,

$ ulimit -a
core file size          (blocks, -c) unlimited
...

Điểm khác,

  • Tôi đã xác minh rằng người dùng của tôi có thể tạo các tệp trong thư mục hiện tại.
  • Tôi đọc về /proc/sys/fs/suid_dumpable. Hiện tại, nó được đặt thành 0 trên máy của tôi. Tôi đã cố gắng thay đổi nó thành 1 hoặc 2 nhưng không có sự khác biệt.
  • Tôi cũng đã cố gắng thực hiện chương trình với quyền root, nhưng điều đó cũng không tạo ra sự khác biệt.

Thật không may, tôi không nhớ khi nào tôi có thể tạo ra kết xuất lõi thành công cuối cùng.

Câu trả lời:


8

Từ các tài liệu trên coredump.conf,

Để vô hiệu hóa tệp cấu hình do nhà cung cấp cung cấp, cách được khuyến nghị là đặt một liên kết tượng trưng /dev/nullvào thư mục cấu hình /etc/, với cùng tên tệp với tệp cấu hình của nhà cung cấp.

sudo ln -s /dev/null /etc/sysctl.d/coredump.conf
sudo systemd-sysctl 

Kể từ systemd, mọi thứ được quản lý khác nhau.


Wow, bạn nói đúng! Cách đây không lâu tôi đã chuyển sang systemd. sudo systemd-coredumpctlcho thấy tất cả các bãi lõi bị thiếu. Giải pháp của bạn đã hoạt động nhưng chỉ sau khi khởi động lại hệ thống.
Philipp Claßen

1
systemdsystemd-sysctl.servicechỉ chạy sysctltại thời điểm thích hợp của khởi động, và xử lý chạy lại nó bằng tay trên những thay đổi. Và đừng đi tạo / ghi đè các tệp cấu hình mà không điều tra xem chúng dùng để làm gì và nội dung của chúng.
vonbrand

1
Tập tin dường như được đổi tên thành 50-coredump.conf, để áp dụng các cài đặt trong khởi động hiện tại, tôi đã phải chạy thay đổi cài đặt sysctl theo cách thủ công, xem stackoverflow.com/q/2065912/427545 .
Lekensteyn

2
Để khôi phục mặc định, không đặt chuỗi trống, thay vào đó, hãy sử dụng chuỗi này:sysctl -w kernel.core_pattern="core"
Lekensteyn

2

Bạn có thể muốn sử dụng coredumpctllệnh để truy xuất kết xuất lõi của mình hoặc chạy gdb trên nó. Đó là phương pháp 'systemd được chấp thuận' để đối phó với họ. : - /

Theo một nghĩa nào đó, thật tuyệt khi systemd đang nắm bắt tất cả những điều này bởi vì nó sẽ tự động xóa chúng sau đó, và nó cũng dễ dàng tải lên các bản sửa lỗi cho các báo cáo lỗi.

Nhưng, đó là một sự thay đổi chói tai với rất ít cách thức thông báo hoặc gợi ý cho những người biết cách thức hoạt động của coredumps trước khi systemd tham gia. Ngay cả việc thả một tệp có tên 'core.pid.txt' với các hướng dẫn sử dụng coredumpctl để có được phần thưởng của bạn cũng như cách tắt việc tạo các .txttệp sẽ giúp ích rất nhiều, mặc dù những người đó cũng đã xả rác hệ thống tập tin trong một thời gian.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.