17

示されているように、apport を有効にしてデプロイされた Ubuntu サーバーがあります。

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

残念ながら、パッケージ化されていないアプリケーションのクラッシュに対処する際の apport の動作は、私たちの好みに完全に合っているわけではありません。これらのシナリオでは、apport は作業ディレクトリに「コア」ファイルを生成します (ulimit -c が適切に設定されていると仮定します)。たとえば、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)

イライラすることに、コア ファイルがそこにあると、上書きされません。たとえば、アプリをテストしていて、作業ディレクトリから古いコア ファイルを消去するのを忘れた場合、テスト中にアプリがクラッシュしても、新しいコア ファイルは表示されません。上書きされたとしても、古いコアが失われるため、これも理想的ではない可能性があります。

理想的には、パッケージ化されていないアプリケーションの場合、指定されたパターン (core_pattern ファイル仕様に従って) に従ってフォーマットされたファイル名を持つコア ファイルを生成するなど、引数を介して apport に伝える機能が必要です。 ..これを行う方法、または同等のものはありますか?

4

2 に答える 2

0

パッケージ化されていないバイナリの場合、apport は引き続き順守する/proc/sys/kernel/core_uses_pidため、適切なコア ファイルを取得する可能性を高めるように設定できます。

/proc/sys/kernel/core_patternaport 自体への参照を持っていると想定されるため、そのような場合に aport がフォールバックするものは何もありません。

/usr/share/apport/apportapport を使用してカーネル コア パターンによって呼び出されるスクリプト内のコードを確認できます。

明らかな代替手段は、使用する新しい Python スクリプトを作成することです。これは、そのスクリプトと同じですが、write_user_coredump関数に変更を加えてから、カーネル コア パターン sysctl を介してそれを接続します。

于 2015-12-07T15:42:11.493 に答える