2013-01-07 17 views
5

Gösterilen şekilde apport etkinleştirilmiş bir Ubuntu sunucumuz var.Paketlenmemiş uygulama kilitlenmeleri için varsayılan varsayılan davranış nasıl değiştirilir?

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

Maalesef olmayan paketlenmiş uygulama çöker ile ilişkilerde apport davranışlarını bizim sevme tamamen değil. apport bu senaryolarda çalışma dizinine "core" dosyaları (ulimit -c'nin uygun şekilde ayarlandığını varsayarak) üretiyor. Örneğin,

Frustratingly
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) 

, apport günlüklerden kez bir çekirdek dosyası, yazılmaz yoktur. Örneğin, bir uygulamayı test ediyor ve çalışma dizinindeki eski bir çekirdek dosyayı temizlemeyi unutursak, test sırasında uygulama çöküyorsa, yeni bir çekirdek dosyası görmeyiz. Üzerine yazılsa bile, bu ya eski çekirdeği kaybettiğimiz için ideal olmayabilir.

İdeal olarak istediğimiz, örneğin argüman aracılığıyla, paketlenmemiş uygulama durumu için, belirtilen bir desene göre biçimlendirilmiş bir dosya adıyla (core_pattern'e göre) bir çekirdek dosya oluşturmasıdır. dosya belirtimi) ... bunu yapmanın bir yolu var mı, yoksa eşdeğer bir şey var mı?

+0

Olası kopyası [Çekirdek dökümü dosyası oluşturulmadı] (http://stackoverflow.com/questions/7732983/core-dump-file-is-not-generated) – conradkdotcom

cevap

0

Paketlenmemiş bir ikili ise, uygulama /proc/sys/kernel/core_uses_pid'a uymaya devam edecektir, böylece doğru çekirdek dosya alma şansınızı artırmak için bunu ayarlayabilirsiniz.

/proc/sys/kernel/core_pattern

kendisini apport bir başvuru olduğu varsayılır, bu nedenle apport böyle bir durumda geri düşmek için bir şey yok.

Sen apport ile çekirdek çekirdek modeliyle çağrılır /usr/share/apport/apport komut kodunu görebilirsiniz.

Bunun gibi bir alternatif, kullanmak için yeni bir Python betiği oluşturmak, ancak write_user_coredump işlevindeki değişikliklerle ve daha sonra çekirdek çekirdek deseni sysctl'sine bağlanır.

1

Başka bir alternatif, çakışmalarınızı ele almak için Apport'u kullanmaktır. Çekirdek dökümü, çarpışma ile ilgili başka bir faydalı bağlamla birlikte koruyacaktır. ~/.config/apport/settings (o yoksa oluşturun) aşağıdaki satırları ekleyin:

[main] 
unpackaged=true 

Şimdi /var/crash yılında Apport .crash dosyaları olarak görünecektir çöker. Bunları apport-unpack ile açabilirsiniz.

Bir ihtar: o Apport hala kullanıcı kontrol 'hata raporu gönder' onay kutusunu bırakırsa Ubuntu hata izleyiciye bu kilitlenmeleri yüklemeye çalışırsa görünür; mülkiyet kodu üzerinde çalışıyorsanız bu bir sorun olabilir. Bu konuda daha fazla bilgi arıyorum; /etc/apport/crashdb.conf, kilitlenme raporlarının nereye gönderileceğini kontrol edebilir.

İlgili konular