Как редактировать шаблон дампа ядра, не отключая apport?

В настоящее время я включил дамп ядра путем редактирования /etc/limits.conf и надстройка * soft core unlimited а также используя ulimit -c unlimited,

Но core_pattern это:

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

Таким образом, ядро ​​передается в apport. Я не возражаю, и я не хочу связываться с apport (у меня есть воспоминание о том, что когда-то что-то идет не так, при этом apport приятно генерирует core файл в каталоге моего двоичного файла, когда он падает.

Есть ли способ отредактировать место, где apport сохраняет ядро, или его имя файла (вместо простого core)? Подобно тому, что я мог сделать, отключив apport и отредактировав core_pattern, но без отключения аппорта.

2 ответа

Решение

Я нашел лучший способ сделать это, так как внесение изменений в apport означает, что каждый раз, когда мы обновляем аппорт, мы должны будем добавлять наши изменения.

Linux позволяет предоставлять сценарий оболочки в качестве программы, выполняемой каждый раз, когда генерируется ядро. Внутри этого файла ядра вы можете вызывать apport как всегда, а затем делать свои собственные вещи. Это включает в себя изменение имени и расположения основного файла.

Чтобы найти путь ядра, сгенерированного apport, вы можете использовать следующие

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

Вы можете отредактировать файл Python apport, чтобы сделать это. Изменить местоположение ядра прямо: вместо

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)

обратите внимание, что если вы хотите добавить двоичное имя в основной файл, вам нужно будет передать его в apport с помощью core_pattern, т.е.

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

Обратите внимание на %e выше которого передается имя исполняемого файла скрипту apport

Не забудьте перезапустить службу apport после внесения изменений в скрипт

Отвечать поздно на 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 я мог изменить расположение дампов ядра и соглашение об именах.

Другие вопросы по тегам