Man page - systemd-coredump@.service(8)
Packages contains this manual
apt-get install systemd-coredump
Available languages:
en deManual
SYSTEMD-COREDUMP
BEZEICHNUNGĂBERSICHT
BESCHREIBUNG
Aufruf von systemd-coredump
SpeicherauszĂŒge in Containern/NamensrĂ€umen
KONFIGURATION
Deaktivierung der Verarbeitung von SpeicherauszĂŒgen
INFORMATIONEN ĂBER ABGESTĂRZTE PROZESSE
SIEHE AUCH
ANMERKUNGEN
ĂBERSETZUNG
BEZEICHNUNG
systemd-coredump, systemd-coredump.socket, systemd-coredump@.service - Erlangen, Speichern und Verarbeiten von SpeicherauszĂŒgen
ĂBERSICHT
/usr/lib/systemd/systemd-coredump
/usr/lib/systemd/systemd-coredump --backtrace
systemd-coredump@.service
systemd-coredump.socket
BESCHREIBUNG
systemd-coredump@.service ist ein System-Dienst, um SpeicherauszĂŒge zu verarbeiten. Es wird eine Zusammenfassung der Ereignisse nach systemd-journald.service (8) protokollieren, einschlieĂlich Informationen ĂŒber den Prozesskennzeichner, EigentĂŒmer, das Signal, das den Prozess tötete und (falls möglich) die Stack-Ablaufverfolgung (»Stack-Trace«). Es kann die SpeicherauszĂŒge auch fĂŒr eine spĂ€tere Verarbeitung speichern. Siehe den nachfolgenden Abschnitt »Informationen ĂŒber abgestĂŒrzte Prozesse«.
Das Verhalten eines bestimmten Programms beim Empfang eines Signal wird durch zwei Faktoren geregelt, die in core (5) im Detail beschrieben sind. Insbesondere werden SpeicherauszĂŒge nur verarbeitet, wenn die zugehörigen Prozessressourcenbegrenzungen ( RLIMIT_CORE ) ausreichend sind.
SpeicherauszĂŒge können in das Journal geschrieben oder als Datei gespeichert werden. In beiden FĂ€llen können sie fĂŒr weitere Verarbeitungen, beispielsweise in gdb (1), abgefragt werden. Siehe coredumpctl (1), insbesondere die Verben list und debug .
StandardmĂ€Ăig protokolliert systemd-coredump den Speicherauszug in das Journal, einschlieĂlich (falls möglich) einer Ablaufverfolgung (Backtrace) und speichert den Speicherauszug (ein Abbild der Speicherinhalte des Prozesses) selbst in einer externen Datei in /var/lib/systemd/coredump/. Diese SpeicherauszĂŒge werden nach ein paar Tagen standardmĂ€Ăig gelöscht; siehe /usr/lib/tmpfiles.d/systemd.conf fĂŒr Details. Beachten Sie, dass die Entfernung von Speicherauszugsdateien aus dem Dateisystem und das Entfernen der Journal-EintrĂ€ge voneinander unabhĂ€ngig sind, und die Speicherauszugsdatei ohne den Journal-Eintrag vorhanden sein kann und Journal-EintrĂ€ge auf bereits entfernte Speicherauszugsdateien verweisen können. Einige Metadaten werden an die Speicherauszugsdateien in Form von erweiterten Attributen angehĂ€ngt, so dass die Speicherauszugsdateien fĂŒr einige Zwecke selbst ohne die vollstĂ€ndigen Metadaten im Journal-Eintrag nĂŒtzlich sein können.
FĂŒr weitere Details siehe Systemd-Speicherauszug-Handhabung [1] .
Aufruf von systemd-coredump
Das Programm systemd-coredump erledigt die eigentliche Arbeit. Es wird zweimal aufgerufen: einmal als Handhabungsprogramm durch den Kernel und das zweite Mal in systemd-coredump@.service, um die Daten tatsÀchlich ins Journal zu schreiben und die Speicherauszugsdateien zu verarbeiten und zu speichern.
Wenn der Kernel systemd-coredump aufruft, um den Speicherauszug zu handhaben, lĂ€uft es im privilegierten Modus und wird sich mit dem durch die Unit systemd-coredump.socket erstellten Socket verbinden, die wiederum eine nicht privilegierte systemd-coredump@.service-Instanz erzeugen wird, um den Speicherauzug zu verarbeiten. Daher sind systemd-coredump.socket und systemd-coredump@.service Hilfs-Units, die die eigentliche Verarbeitung von SpeicherauszĂŒgen vornehmen und der normalen Diensteverwaltung unterliegen.
Es ist auch möglich, systemd-coredump mit der Option --backtrace aufzurufen. In diesem Fall erwartet systemd-coredump auf der Standardeingabe einen Journaleintrag im Journal-Exportformat [2] . Der Eintrag sollte ein MESSAGE= -Feld und sĂ€mtliche zusĂ€tzliche Metadatenfelder, die der Aufrufende vernĂŒnftigerweise erwarten wĂŒrde, enthalten. systemd-coredump hĂ€ngt zusĂ€tzliche Metadatenfelder auf die gleiche Art an, wie es das fĂŒr vom Kernel empfangene SpeicherauszĂŒge auch macht. In diesem Modus werden keine SpeicherauszĂŒge im Journal gespeichert.
SpeicherauszĂŒge in Containern/NamensrĂ€umen
Der Dienst systemd-coredump@.service wird automatisch versuchen, einen Stacktrace aus einem Prozess beim Absturz zu extrahieren. FĂŒr diesen Stacktrace werden Symbole basierend auf Informationen, die in dem abstĂŒrzenden ELF-Abbild eingebettet sind oder aus Ă€quivalenten Fehlersuchinformationen, die auf dem Hauptbetriebssystem verfĂŒgbar sind, aufgelöst. FĂŒr Prozesse, die innerhalb von lokalen Containern oder anderen, EinhĂ€nge-Namensraum-basierten Sandboxes abstĂŒrzen, ist diese externe Fehlersuchinformation typischerweise nicht auf dem Hauptsystem verfĂŒgbar (einfach deshalb, weil Container typischerweise andere Software-Versionen als das Hauptsystem verwenden). systemd-coredump (8) stellt zwei Mechanismen bereit, um dies zu adressieren:
1. FĂŒr Container mit vollstĂ€ndigen Betriebssystemen, die innerhalb Systemd betreiben, wird empfohlen, CoredumpReceive= auf der Unit zu aktivieren (siehe systemd.resource-control (5)). Damit ist sichergestellt, dass versucht wird, SpeicherauszĂŒge eines Containers an den im Container betriebenen systemd-coredump@.service weiterzuleiten, d.h. der Container erhĂ€lt den Prozess und speichert seine eigenen SpeicherauszĂŒge. Beachten Sie, dass systemd-nspawn (8) standardmĂ€Ăig diesen Modus verwendet, falls es mit dem Schalter --boot aufgerufen wird. Diese Arbeitsweise wird im Allgemeinen aus SicherheitsgrĂŒnden empfohlen: die sicherheitsrelevante Verarbeitung des Speicherauszugs erfolgt innerhalb der Begrenzungen des Containers selbst, durch den Code des Containers und hinterlegt durch den eigenen Speicher des Containers.
2. FĂŒr restriktivere Container (die kein ordentliches Init-System als PID 1 verwenden) ist es alternativ möglich, die Verarbeitung des Speicherauszugs auf dem Hauptsystem zu aktivieren, mit Zugriff auf die Fehlersuchinformationsdaten aus dem Container selbst. Diese Arbeitsweise muss mittels EnterNamespace= in coredump.conf (5) aktiviert werden und ist standardmĂ€Ăig aus SicherheitsgrĂŒnden ausgeschaltet.
Falls sowohl CoredumpReceive= auf der Unit des Containers, zu dem der Speicherauszug gehört, als auch EnterNamespace= in der Konfigurationsdatei coredump.conf aktiviert sind, hat erstere Einstellung den Vorrang.
KONFIGURATION
FĂŒr von systemd gestartete Programme können Prozessressourcenbegrenzungen mit der Direktive LimitCORE= eingerichtet werden, siehe systemd.exec (5).
Um vom Kernel fĂŒr den Umgang mit SpeicherauszĂŒgen eingesetzt zu werden, muss systemd-coredump im Parameter kernel.core_pattern von sysctl (8) konfiguriert sein. Die Syntax dieses Parameters wird in core (5) erklĂ€rt. Systemd installiert die Datei /usr/lib/sysctl.d/50-coredump.conf, die kernel.core_pattern entsprechend konfiguriert. Diese Datei kann gemÀà normaler sysctl.d (5)-Regeln maskiert oder auĂer Kraft gesetzt werden, um eine andere Einstellung zu verwenden. Falls die Sysctl-Konfiguration verĂ€ndert wird, muss diese im Kernel aktualisiert werden, bevor sie wirksam wird, siehe sysctl (8) und systemd-sysctl (8).
Um im Modus --backtrace eingesetzt zu werden, muss ein geeignetes Backtrace-Handhabungsprogramm auf der Senderseite installiert sein. Im Falle von python (1) bedeutet dies beispielsweise, dass ein sys.excepthook installiert sein muss, siehe systemd-coredump-python [3] .
Das Verhalten von systemd-coredump selbst wird mittels der Konfigurationsdatei /etc/systemd/coredump.conf und entsprechenden Schnippseln in /etc/systemd/coredump.conf.d/*.conf konfiguriert, siehe coredump.conf (5). Eine neue Instanz von systemd-coredump wird nach jedem Empfang eines Speicherauszuges aufgerufen. Daher werden Ănderungen in diesen Dateien wirksam, wenn das nĂ€chste Mal ein Speicherauszug empfangen wird.
Die von SpeicherauszĂŒgen verwandten Ressourcen werden auf zwei Arten begrenzt. Parameter wie die maximale GröĂe empfangener SpeicherauszĂŒge und Dateien können in den oben erwĂ€hnten Dateien /etc/systemd/coredump.conf und Schnippseln geĂ€ndert werden. ZusĂ€tzlich wird die Speicherdauer von SpeicherauszĂŒgen durch systemd-tmpfiles beschrĂ€nkt, entsprechende Einstellungen sind standardmĂ€Ăig in /usr/lib/tmpfiles.d/systemd.conf. StandardmĂ€Ăig werden die SpeicherauszĂŒge nach ein paar Tagen gelöscht; weitere Details finden Sie in obiger Datei.
Deaktivierung der Verarbeitung von SpeicherauszĂŒgen
Um die möglicherweise ressourcenintensive Verarbeitung durch systemd-coredump zu deaktivieren, setzen Sie
Storage=none
ProcessSizeMax=0
in coredump.conf (5).
INFORMATIONEN ĂBER ABGESTĂRZTE PROZESSE
coredumpctl (1) kann zur Abfrage gespeicherter SpeicherauszĂŒge, unabhĂ€ngig von ihrem Ort, zur Anzeige von Informationen und zur Verarbeitung z.B. durch Weitergabe an den GNU-Debugger (gdb) verwandt werden.
Im Journal gespeicherte Daten können auch wie gewöhnlich mit journalctl (1) (oder von einem anderen Prozess mittels der sd-journal (3)-API) betrachtet werden. Die relevanten Nachrichten enthalten MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1 :
$
journalctl MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1 -o
verbose
âŠ
MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1
COREDUMP_PID=552351
COREDUMP_UID=1000
COREDUMP_GID=1000
COREDUMP_SIGNAL_NAME=SIGSEGV
COREDUMP_SIGNAL=11
COREDUMP_TIMESTAMP=1614342930000000
COREDUMP_COMM=Web Content
COREDUMP_EXE=/usr/lib64/firefox/firefox
COREDUMP_USER_UNIT=app-gnome-firefox-552136.scope
COREDUMP_CMDLINE=/usr/lib64/firefox/firefox -contentproc
-childID 5 -isForBrowser âŠ
COREDUMP_CGROUP=/user.slice/user-1000.slice/user@1000.service/app.slice/app-âŠ.scope
COREDUMP_FILENAME=/var/lib/systemd/coredump/core.WebâŠ.552351.âŠ.zst
âŠ
Die folgenden Felder werden (falls bekannt) mit dem Journal-Eintrag gespeichert:
COREDUMP_UID= , COREDUMP_PID= , COREDUMP_GID=
Die Prozessnummer (PID), die Benutzernummer (UID) und die Gruppennummer (GID) des EigentĂŒmers des abgestĂŒrzten Prozesses.
Falls der abgestĂŒrzte Prozess Teil eines Containers war (oder im allgemeinen in einem Prozess- oder Benutzernamensraum war), sind dies die von auĂen gesehenen Werte, im Namensraum, in dem systemd-coredump lĂ€uft.
HinzugefĂŒgt in Version 248.
COREDUMP_BY_PIDFD=
Falls der abgestĂŒrzte Prozess mittels einer vom Kernel bereitgestellten PIDFD analysiert wurde (benötigt Kernel v6.16), dann wird dieses Feld vorhanden und auf »1« gesetzt sein. Falls dieses Feld nicht gesetzt ist, dann wurde dieser Prozess mittels einer PID analysiert, die bekanntermaĂen WettlĂ€ufen um Ressourcen unterliegt.
HinzugefĂŒgt in Version 258.
COREDUMP_TIMESTAMP=
Die Uhrzeit vom Absturz, wie vom Kernel gemeldet (in ”s seit der Epoch).
HinzugefĂŒgt in Version 248.
COREDUMP_RLIMIT=
Die weiche Ressourcenbegrenzung fĂŒr Speicherauszugsdateien, siehe getrlimit (2).
HinzugefĂŒgt in Version 248.
COREDUMP_UNIT= , COREDUMP_SLICE=
Die Namen der System-Unit und der Scheibe.
Wenn der abgestĂŒrzte Prozess sich in einem Container befand, sind dies die Unit-Namen auĂerhalb , im Haupt-Systemverwalter.
HinzugefĂŒgt in Version 248.
COREDUMP_CGROUP=
Die primĂ€re Cgrup der Unit des abgestĂŒrzten Prozesses.
Wenn der abgestĂŒrzte Prozess sich in einem Container befand, ist dies der vollstĂ€ndige Pfad, wie er auĂerhalb des Containers gesehen wird.
HinzugefĂŒgt in Version 248.
COREDUMP_PROC_CGROUP=
Control-Gruppen-Informationen in dem Format, das in /proc/self/cgroup genutzt wird. Auf Systemen mit vereinigter Cgroup-Hierarchie, ist dies der einzelne Pfad, dem »0::« vorangestellt wurde, und mehrere Pfade, denen die Controller-Nummer vorangestellt wurden, auf Altsystemen.
Wenn der abgestĂŒrzte Prozess sich in einem Container befand, ist dies der vollstĂ€ndige Pfad, wie er auĂerhalb des Containers gesehen wird.
HinzugefĂŒgt in Version 248.
COREDUMP_OWNER_UID= , COREDUMP_USER_UNIT= , COREDUMP_SESSION=
Die numerische UID des Benutzers, dem die Anmeldesitzung oder die Systemd-Benutzer-Unit des abgestĂŒrzten Prozesses gehört, die Benutzerverwalter-Unit und den Sitzungskennzeichner. Alle drei Felder sind nur fĂŒr Benutzerprozesse vorhanden.
Wenn sich der abgestĂŒrzte Prozess in einem Container befand, sind dies die Werte auĂerhalb , im Hauptsystem.
HinzugefĂŒgt in Version 248.
COREDUMP_SIGNAL_NAME= , COREDUMP_SIGNAL=
Der Name des beendenden Signals (mit »SIG« am Anfang [4] ) und der numerische Wert. (Beide sind enthalten, da sich die Signalnummern zwischen Architekturen unterscheiden.)
HinzugefĂŒgt in Version 248.
COREDUMP_CWD= , COREDUMP_ROOT=
Das aktuelle Arbeitsverzeichnis und Wurzelverzeichnis des abgestĂŒrzten Prozesses.
Wenn sich der abgestĂŒrzte Prozess in einem Container befand, sind diese Pfade relativ zur Wurzel des EinhĂ€ngenamensraums des Containers.
HinzugefĂŒgt in Version 248.
COREDUMP_DUMPABLE=
Das vom Kernel berichtete Feld PR_GET_DUMPABLE , siehe prctl (2).
HinzugefĂŒgt in Version 258.
COREDUMP_OPEN_FDS=
Informationen ĂŒber offene Dateideskriptoren, in den folgenden Formaten:
fd
:
/Pfad/zur/Datei
pos: âŠ
flags: âŠ
âŠ
fd
:
/Pfad/zur/Datei
pos: âŠ
flags: âŠ
âŠ
Die erste Zeile enthÀlt die Dateideskriptorennummer fd und den Pfad, wÀhrend nachfolgende Zeilen die Inhalte von /proc/ PID /fdinfo/ fd anzeigen.
HinzugefĂŒgt in Version 248.
COREDUMP_EXE=
Das Ziel des Symlinks /proc/ PID /exe.
Wenn sich der abgestĂŒrzte Prozess in einem Container befindet, ist der Pfad relativ zu der Wurzel des EinhĂ€ngenamensraums des Containers.
HinzugefĂŒgt in Version 248.
COREDUMP_CMDLINE= , COREDUMP_COMM= , COREDUMP_ENVIRON= , COREDUMP_PROC_AUXV= , COREDUMP_PROC_LIMITS= , COREDUMP_PROC_MAPS= , COREDUMP_PROC_MOUNTINFO= , COREDUMP_PROC_STATUS=
Felder, die die prozessbezogenen EintrĂ€ge im Dateisystem /proc zuordnen: /proc/ PID /cmdline (die Befehlszeile des abgestĂŒrzten Prozesses), /proc/ PID /comm (der dem Prozess zugeordnete Befehlsname), /proc/ PID /environ (der Umgebungsblock des abgestĂŒrzten Prozesses), /proc/ PID /auxv (der Hilfsvektor des abgestĂŒrzten Prozesses, siehe getauxval (3)), /proc/ PID /limits (die weichen und die harten Ressourcenbegrenzungen), /proc/ PID /maps (Speicherregionen, die fĂŒr den Prozess sichtbar sind und die zugehörigen Zugriffsberechtigungen), /proc/ PID /mountinfo (EinhĂ€ngepunkte im EinhĂ€ngenamensraum des Prozesses), /proc/ PID /status (verschiedene Metadaten des Prozesses).
Siehe proc (5) fĂŒr weitere Informationen.
HinzugefĂŒgt in Version 248.
COREDUMP_HOSTNAME=
Der System-Rechnername.
Wenn sich der abgestĂŒrzte Prozess in einem Container befand, ist dies der Rechnername des Containers.
HinzugefĂŒgt in Version 248.
COREDUMP_CONTAINER_CMDLINE=
FĂŒr Prozesse, die in einem Container ausgefĂŒhrt werden, die Befehlszeile des Prozesses, der den Container gestartet hat (der erste ĂŒbergeordnete Prozess mit einem anderen EinhĂ€ngenamensraum).
HinzugefĂŒgt in Version 248.
COREDUMP=
Wenn der Speicherauszug im Journal gespeichert wurde, das Speicherauszugsabbild selbst.
HinzugefĂŒgt in Version 248.
COREDUMP_FILENAME=
Wenn der Speicherauszug extern gespeichert wurde, der Pfad zu der Speicherauszugsdatei.
HinzugefĂŒgt in Version 248.
COREDUMP_TRUNCATED=
Auf »1« gesetzt, wenn der gespeicherte Speicherauszug abgeschnitten wurde. (Eine unvollstÀndige Speicherauszugsdatei kann von einigen Werkzeugen noch verarbeitet werden, obwohl logischerweise nicht die vollstÀndigen Informationen vorhanden sind.)
HinzugefĂŒgt in Version 248.
COREDUMP_PACKAGE_NAME= , COREDUMP_PACKAGE_VERSION= , COREDUMP_PACKAGE_JSON=
Falls das Programm .package-Metadaten-ELF-Bemerkungen enthĂ€lt, werden diese ausgewertet und angehĂ€ngt. Das Paket und die PaketVersion des [u00BB]Haupt[u00AB]-ELF-Moduls (d.h. des Programms) werden einzeln angehĂ€ngt. Der JSON-formatierte Inhalt aller Module wird als einzelnes JSON-Objekt angehĂ€ngt, jedes mit dem Modulnamen als SchlĂŒssel. FĂŒr weitere Informationen ĂŒber dieses Metadatenformat und den Inhalt, siehe die Speicherauszugs-Metadatenspezifikation [5] .
HinzugefĂŒgt in Version 249.
MESSAGE=
Die durch systemd-coredump erstellte Nachricht, die die Ablaufverfolgung enthÀlt, falls sie erfolgreich erstellt wurde. Wird systemd-coredump mit --backtrace aufgerufen, dann wird das Feld vom Aufrufenden bereitgestellt.
HinzugefĂŒgt in Version 248.
Im Journal-Eintrag existieren eine Reihe von weiteren Feldern, die aber dem Protokollierungsprozess betreffen, d.h. systemd-coredump und nicht den abgestĂŒrzten Prozess. Siehe systemd.journal-fields (7).
Die folgenden Felder werden mit der in COREDUMP_FILENAME= aufgefĂŒhrten externen Datei als erweiterte Attribute gespeichert (falls bekannt):
user.coredump.pid , user.coredump.uid , user.coredump.gid , user.coredump.signal , user.coredump.timestamp , user.coredump.rlimit , user.coredump.hostname , user.coredump.comm , user.coredump.exe
Diese sind identisch zu den oben beschriebenen COREDUMP_PID= , COREDUMP_UID= , COREDUMP_GID= , COREDUMP_SIGNAL= , COREDUMP_TIMESTAMP= , COREDUMP_RLIMIT= , COREDUMP_HOSTNAME= , COREDUMP_COMM= und COREDUMP_EXE= .
HinzugefĂŒgt in Version 248.
Diese können sich mittels getfattr (1) angeschaut werden. FĂŒr die im obigen Journal-Eintrag gezeigte Speicherauszugsdatei:
$
getfattr --absolute-names -d
/var/lib/systemd/coredump/core.WebâŠ.552351.âŠ.zst
# file:
/var/lib/systemd/coredump/core.WebâŠ.552351.âŠ.zst
user.coredump.pid="552351"
user.coredump.uid="1000"
user.coredump.gid="1000"
user.coredump.signal="11"
user.coredump.timestamp="1614342930000000"
user.coredump.comm="Web Content"
user.coredump.exe="/usr/lib64/firefox/firefox"
âŠ
SIEHE AUCH
coredump.conf (5), coredumpctl (1), systemd-journald.service (8), systemd-tmpfiles (8), core (5), sysctl.d (5), systemd-sysctl.service (8), Systemd-Speicherauszug-Handhabung [1]
ANMERKUNGEN
|
1. |
Systemd-Speicherauszug-Handhabung |
https://systemd.io/COREDUMP
|
2. |
Journal-Exportformat |
https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-export-format
|
3. |
systemd-coredump-python |
https://github.com/systemd/systemd-coredump-python
|
4. |
kill (1) erwartet Signalnamen ohne den PrÀfix; kill (2) verwendet den PrÀfix; alle Systemd-Werkzeuge akzeptieren Signalnamen sowohl ohne als auch mit dem PrÀfix. |
||
|
5. |
Die Speicherauszugs-Metadatenspezifikation |
https://systemd.io/COREDUMP_PACKAGE_METADATA/
ĂBERSETZUNG
Die deutsche Ăbersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Ăbersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezĂŒglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ĂŒbernommen.
Wenn Sie Fehler in der Ăbersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ăbersetzer: debian-l10n-german@lists.debian.org .