2013-01-07 37 views
5

Chúng tôi có một máy chủ Ubuntu được triển khai với apport được kích hoạt như được hiển thị.Làm cách nào để thay đổi hành vi mặc định của apport đối với các sự cố ứng dụng không được đóng gói?

~$ cat /proc/sys/kernel/core_pattern 
|/usr/share/apport/apport %p %s %c 

Rất tiếc, hành vi của Apport trong việc xử lý sự cố ứng dụng không đóng gói không hoàn toàn theo ý thích của chúng tôi. apport đang sản xuất các tệp "core" (giả sử ulimit -c được thiết lập một cách thích hợp) trong thư mục làm việc trong các kịch bản này. Ví dụ, từ các bản ghi apport,

ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable: /home/jess/a.out (command line "./a.out") 
ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable does not belong to a package, ignoring 
ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: writing core dump to /home/jess/core (limit: 18889465931478580853760) 

phiền, một khi một tập tin lõi là có nó sẽ không được ghi đè. Vì vậy, ví dụ nếu chúng tôi đang thử nghiệm một ứng dụng và quên xóa một tệp lõi cũ khỏi thư mục đang hoạt động thì ứng dụng gặp sự cố trong khi thử nghiệm, chúng tôi sẽ không thấy tệp lõi mới. Ngay cả khi nó bị ghi đè, điều này có thể không lý tưởng, hoặc khi chúng ta mất đi lõi cũ. Lý tưởng nhất là những gì chúng tôi muốn là khả năng nói apport, thông qua một đối số ví dụ, cho trường hợp ứng dụng không đóng gói, tạo một tệp lõi với tên tệp được định dạng theo mẫu được chỉ định (theo core_pattern tập tin đặc điểm kỹ thuật) ... là có cách nào để làm điều này, hoặc một cái gì đó tương đương?

+0

Bản sao có thể có của [Tệp kết xuất lõi không được tạo] (http://stackoverflow.com/questions/7732983/core-dump-file-is-not-generated) – conradkdotcom

Trả lời

0

Nếu đó là tệp nhị phân chưa được đóng gói, apport sẽ vẫn tuân theo /proc/sys/kernel/core_uses_pid để bạn có thể đặt điều đó để tăng cơ hội nhận tệp lõi chính xác.

Các /proc/sys/kernel/core_pattern được giả định có tham chiếu để tự ứng dụng, do đó, không có gì để apport quay trở lại trong trường hợp như vậy.

Bạn có thể xem mã trong tập lệnh /usr/share/apport/apport được gọi bởi mẫu lõi hạt nhân với apport.

Một giải pháp thay thế rõ ràng là tạo một tập lệnh Python mới để sử dụng, giống như tập lệnh đó, nhưng với các sửa đổi trong hàm write_user_coredump, và sau đó móc lên thông qua sysctl mẫu lõi hạt nhân.

1

Một cách khác là sử dụng Apport để xử lý sự cố của bạn. Nó sẽ lưu kết xuất lõi, cùng với một tấn ngữ cảnh hữu ích khác về sự cố. Thêm các dòng sau để ~/.config/apport/settings (tạo ra nó nếu nó không tồn tại):

[main] 
unpackaged=true 

Bây giờ treo sẽ xuất hiện dưới dạng file Apport .crash trong /var/crash. Bạn có thể giải nén chúng bằng apport-unpack.

Một báo trước: có vẻ như Apport vẫn cố gắng tải lên các sự cố này lên trình theo dõi lỗi của Ubuntu nếu người dùng rời khỏi hộp kiểm 'Gửi báo cáo lỗi' được chọn; điều này có thể là một vấn đề nếu bạn đang làm việc trên mã độc quyền, vv Tôi đang tìm thêm thông tin về điều này; có vẻ như /etc/apport/crashdb.conf có thể kiểm soát nơi các báo cáo sự cố được gửi đi.