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