systemdの[Manager] DumpCoreオプションは何をしますか?

1
2022.03.05

私のシステム(Debian 11)では、 /etc/systemd/system.conf[Manager]セクションにDumpCoreオプション(ブール値)があります。

 $ 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
2022.03.05

このオプションは、systemdの「クラッシュハンドラー」の動作を制御します。つまり、何らかの理由でクラッシュした場合に通常はPID 1(initプロセス)のコアダンプを引き起こすSIGSEGVおよび関連信号のハンドラーです。

systemdはPID1として実行されるため、クラッシュが発生した場合でもすぐに終了することは避けたいと考えています。initプロセスが終了すると、カーネルはすぐにパニックに陥ります。これにより、デバッグが少し難しくなります。そのため、通常のすべての「クラッシュ」シグナル(SIGSEGV、SIGILL、SIGFPE、SIGBUS、SIGQUIT、およびSIGABRT)にカスタムシグナルハンドラーをインストールします。

src / core / main.c:crash()にあるこのハンドラーは、犠牲の「子」プロセスでコアダンプをフォークして手動でトリガーしますが、メインプロセスは停止する代わりに操作を永続的に中断するため、残りのシステムは一種の実行状態を維持し、デバッガーを接続することもできます。

(比較のために、古いLinuxの「sysvinit」も同じことをします。

ここでのDumpCore=オプションは、クラッシュハンドラーが実際にコアダンプを作成しようとするかどうかのみを制御します。状況によっては、無効にする必要がある場合があります。たとえば、調査中の問題がsystemd-coredumpサブシステムにも影響する場合や、ダンプを保存する場所がない組み込みシステムの場合などです。


これは、コアダンプを開始するかどうかを定義するsystemdの「manager」オプションであるため、ダンプのみを受信するsystemd-coredumpハンドラーとは関係ありません。

このオプションは、実際にはsystemd-system.conf(5)のマニュアルページに記載されています。

 LogColor =、LogLevel =、LogLocation =、LogTarget =、LogTime =、 DumpCore = yes 、 
CrashChangeVT = no、CrashShell = no、CrashReboot = no、ShowStatus = yes、
DefaultStandardOutput = journal、DefaultStandardError = inherit

    基本的なマネージャー操作のさまざまなパラメーターを構成します。これらのオプション
    それぞれのプロセスとカーネルのコマンドライン引数によって上書きされる場合があります。
    詳細については、 systemd(1)を参照してください。

リンクされたマニュアルページには、カーネルコマンドラインセクションに記載されています。

 systemd.dump_core

    ブール引数を取るか、オプションが指定されていない場合はオプションを有効にします
    口論。有効にすると、systemdマネージャー(PID 1)はコアダンプを実行します
    クラッシュします。それ以外の場合、コアダンプは作成されません。デフォルトは有効です。