systemd 的 [Manager] DumpCore 选项有什么作用?

systemd 的 [Manager] DumpCore 选项有什么作用?

在我的系统(Debian 11)上,在部分中/etc/systemd/system.conf有一个DumpCore选项(布尔值)[Manager]

$ cat /etc/systemd/system.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See systemd-system.conf(5) for details.

[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#LogTime=no
#DumpCore=yes
...

我在 systemd 手册页中找不到有关此选项的任何文档:

这个选项起什么作用?

答案1

此选项控制 systemd 的“崩溃处理程序”的行为,即 SIGSEGV 和相关信号的处理程序,如果由于某种原因崩溃,通常会导致 PID 1(init 进程)的核心转储。

由于 systemd 以 PID 1 运行,因此它希望避免在崩溃的情况下立即退出 - 每当 init 进程退出时,内核都会立即 panic(),这会使进一步的调试变得有点困难。因此,它为所有常见的“崩溃”信号(SIGSEGV、SIGILL、SIGFPE、SIGBUS、SIGQUIT 和 SIGABRT)安装了自定义信号处理程序。

此处理程序位于src/core/main.c:崩溃(),将分叉并手动在牺牲的“子”进程中触发核心转储,而主进程永久暂停操作而不是死亡,以便系统的其余部分保持运行,并且您仍然可以将调试器附加到它。

(相比之下,旧的 Linux ‘sysvinit’做同样的事情。

此处的选项DumpCore=仅控制崩溃处理程序是否实际尝试创建核心转储。在某些情况下,可能需要禁用它,例如,如果正在调查的问题也影响 systemd-coredump 子系统,或者如果它是嵌入式系统,而该系统没有任何地方可以存储转储。


因为这是一个 systemd“管理器”选项,它定义是否应该发起,它与 systemd-coredump 处理程序无关,后者只会收到垃圾场。

该选项实际上在systemd-system.conf(5)手册页:

日志颜色=、日志级别=、日志位置=、日志目标=、日志时间=、DumpCore=是
CrashChangeVT=否、CrashShell=否、CrashReboot=否、ShowStatus=是、
DefaultStandardOutput=日志,DefaultStandardError=继承

    配置基本管理器操作的各种参数。这些选项
    可能会被相应的进程覆盖,并且内核命令行参数systemd(1)了解详情。

链接的手册页记录了它内核命令行部分:

systemd.dump_core

    接受布尔参数,或启用选项(如果未指定)
    参数。如果启用,systemd 管理器 (PID 1) 在以下情况下会转储核心:
    崩溃。否则,不会创建核心转储。默认为启用。

相关内容