Wie kann ich das Core-Dump-Muster bearbeiten, ohne Apport zu deaktivieren?

7

Derzeit habe ich Core-Dumps durch Bearbeiten /etc/limits.confund Hinzufügen * soft core unlimitedsowie Verwenden aktiviert ulimit -c unlimited.

Aber das core_pattern ist folgendes:

kernel.core_pattern = |/usr/share/apport/apport %p %s %c %P

So wird der Kern an Apport übertragen. Es macht mir nichts aus, und ich möchte mich nicht mit Apport herumschlagen (ich habe eine Erinnerung daran, dass dabei einmal etwas schief gelaufen ist). Außerdem generiert Apport eine coreDatei im Verzeichnis meiner Binärdatei, wenn sie abstürzt.

Gibt es eine Möglichkeit, den Speicherort zu bearbeiten, an dem Apport den Kern oder seinen Dateinamen speichert (anstelle eines einfachen core)? Ähnlich wie ich es tun könnte, indem ich Apport deaktiviere und bearbeite core_pattern, aber ohne Apport zu deaktivieren.

coyotte508
quelle

Antworten:

1

Ich habe einen besseren Weg gefunden, dies zu tun, da Änderungen an Apport bedeuten, dass wir jedes Mal, wenn wir Apport aktualisieren, unsere Änderungen hinzufügen müssen.

Unter Linux können Sie ein Shell-Skript als Programm bereitstellen, das jedes Mal ausgeführt wird, wenn ein Kern generiert wird. In dieser Kerndatei können Sie wie immer apport aufrufen und dann Ihre benutzerdefinierten Aufgaben erledigen. Dies umfasst das Ändern des Namens und des Speicherorts der Kerndatei.

Um den von apport generierten Pfad des Kerns zu ermitteln, können Sie Folgendes verwenden

core_dir=realpath '/proc/$1/cwd'
Abhishek Jain
quelle
3

Sie können dazu die Python-Apport-Datei bearbeiten. Das Ändern der Position des Kerns ist unkompliziert: statt

core_path = os.path.join(cwd, 'core') 

du kannst Geben

core_path = os.path.join('my_custom_path, 'core)

Der Name kann auch auf ähnliche Weise geändert werden, z. B. von:

core_path += '.' + str(pid)

zu

core_path += '.' + str(my_custom_name) + '.' + str(pid)

Beachten Sie, dass Sie, wenn Sie den Binärnamen zur Kerndatei hinzufügen möchten, ihn an das Apport mit dem Kernmuster übergeben müssen, z

|/usr/share/apport/apport %p %s %c %d %P %e

Beachten Sie das %eObige, das den Namen der ausführbaren Datei an das Apport-Skript übergibt

Denken Sie daran, den Apport-Dienst neu zu starten, nachdem Sie eine Änderung im Skript vorgenommen haben

Abhishek Jain
quelle
2

Wenn Sie zu spät auf OP antworten, hilft dies möglicherweise jemand anderem.

Ich habe versucht, etwas Ähnliches zu tun und Core-Dumps beim Start mithilfe eines systemd-Dienstes zu aktivieren (falls die Einstellungen von einem anderen Entwickler / einer anderen Bereitstellung geändert wurden).

Ich habe mich auch damit beschäftigt, das core_pattern zu überschreiben:

kernel.core_pattern = |/usr/share/apport/apport %p %s %c %P

Da ich Apport nicht deaktivieren wollte, konnte ich den Apport-Pfad umgehen, indem ich meinen Dienst nach dem Apport auslöste:

[Unit]
Description=Enable Core Dumps
After=apport

[Service]
ExecStart=/usr/bin/enable_core_dump.sh

[Install]
WantedBy=multi-user.target

Dann konnte ich über das Bash-Skript den Speicherort und die Namenskonvention ändern.

Stevman
quelle