如何在不禁用 apport 的情况下编辑核心转储模式?

如何在不禁用 apport 的情况下编辑核心转储模式?

/etc/limits.conf目前我已经通过编辑和添加* soft core unlimited以及使用启用了核心转储ulimit -c unlimited

但核心模式是这样的:

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

因此核心被传输到 apport。我不介意,也不想弄乱 apport(我记得这样做时出了点问题),而且当二进制文件崩溃时,apport 会很好地core在我的二进制文件的目录中生成一个文件。

有什么方法可以编辑 apport 保存核心的位置或其文件名(而不是简单的core)?类似于我通过禁用 apport 并编辑 所做的操作core_pattern,但不禁用 apport。

答案1

您可以编辑 apport python 文件来执行此操作。更改核心的位置很简单:而不是

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

你可以放

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

也可以用类似的方式更改名称,即:

core_path += '.' + str(pid)

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

请注意,如果您想将二进制名称添加到核心文件,则必须使用 core_pattern 将其传递给 apport,即

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

注意%e上面将可执行文件名称传递给 apport 脚本

更改脚本后记得重启 apport 服务

答案2

对 OP 的回复晚了,但也许这会对其他人有所帮助。

我试图做一些类似的事情,使用 systemd 服务在启动时启用核心转储(以防设置被另一个开发人员/部署更改)。

我也遇到了 apport 覆盖 core_pattern 的问题:

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

因为我不想禁用 apport,所以我能够通过在 apport 之后触发我的服务来绕过 apport 路径:

[Unit]
Description=Enable Core Dumps
After=apport

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

[Install]
WantedBy=multi-user.target

然后我可以从 bash 脚本中更改核心转储位置和命名约定。

答案3

我找到了一种更好的方法,因为对 apport 进行更改意味着每次我们升级 apport 时我们都必须添加我们的更改。

Linux 允许您提供 shell 脚本作为每次生成核心时执行的程序。在此核心文件中,您可以像往常一样调用 apport,然后执行自定义操作。这包括更改核心文件的名称和位置。

要找到 apport 生成的核心的路径,可以使用以下命令

core_dir=realpath '/proc/$1/cwd'

相关内容