Tech

Linux サービス経由起動プロセスのコアダンプ抑制

CentOS7/8 , Ubuntu でsystemd のサービスとして起動したプロセスのコアダンプ(coreファイル出力)を抑制する方法です。

設定の確認

ulimitで確認

プロセスが実行されるアカウントでulimit確認

$
$ ulimit -a
core file size          (blocks, -c) 0

0(ゼロ)で、出力は抑制されていますが、systemd のサービス経由で起動されたプロセスに対しては効きません。

/etc/systemd/system.confを確認

/etc/systemd/system.conf

DumpCore=yes のときにcoreファイルが出力されます。

$
$ cat  /etc/systemd/system.conf
 
[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes

DumpCore=yes の指定はありませんが、効きません。

対応方法

systemd のサービスとして起動したプロセスのリソース制限値には /etc/security/limits.conf などで設定している制限値が適用されません。
(systemdサービスにはPAM Limitが適用されない)

systemd のサービスとして起動したプロセスのリソース制限値は xxxx.serviceファイル内に設定します。

個々のサービスで設定確認

サービス名が、XXXXの場合。

#
# systemctl show XXXX | grep CORE
LimitCORE=infinity

 か
LimitCORE=18446744073709551615

0(ゼロ)ではないのでコア出力されます。

ファイル修正

#vi /lib/systemd/system/XXXX.service

[Service]
LimitCORE=0 ←追加

サービスの設定再読み込み(リロード)

#

# (1)サービス停止
# systemctl stop XXXX

#(2)デーモンの設定をリロード
# systemctl daemon-reload

#(3)サービス起動
# systemctl start XXXX


#(4)値確認
# systemctl show XXXX | grep CORE
LimitCORE=0

まとめ

CentOS7でsystemdに変更になり、Webで検索しても古い情報と混ざっていて、何が正解かすぐには分かりにくいですね。