После дальнейшего расследования я обнаружил ядро.core_pattern был перезаписан упаковка аппорт при загрузке системы.
Я должен был подумать о проверке аппорт когда я увидел строку "/usr/share/apport/apport". я не был уверен аппорт был на самом деле тот, который перезаписывает ядро.core_pattern, поэтому я решил взглянуть на его исходный код.
Запустив аппорт политики apt-cache, я обнаружил, что версия, которую я использовал, была 2.20.9-0убунту7.24:
vagrant@ubuntu-bionic:~$ политика apt-cache применяется
аппорт:
Установлено: 2.20.9-0ubuntu7.24
Кандидат: 2.20.9-0ubuntu7.24
Таблица версий:
*** 2.20.9-0ubuntu7.24 500
500 http://archive.ubuntu.com/ubuntu bionic-updates/main Пакеты amd64
500 пакетов http://security.ubuntu.com/ubuntu bionic-security/main amd64
100 /var/lib/dpkg/status
2.20.9-0ubuntu7 500
500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Пакеты
бродяга@ubuntu-bionic:~$
Затем на аппортх Страница панели запуска, я нашел его ссылку для скачивания: appport_2.20.9-0ubuntu7.tar.gz.
Поискав в исходном коде, я нашел файл debian/apport.init имеет следующее содержание:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
эхо 2 > /proc/sys/fs/suid_dumpable
}
Так что я побежал dpkg -L аппорт на моей виртуальной машине, чтобы увидеть, был ли этот файл:
vagrant@ubuntu-bionic:~$ dpkg -L appport | grep инициализация
/etc/инит.д
/etc/init.d/аппорт
Не было ни одного файла с точно совпадающим именем, но я решил взглянуть на /etc/init.d/аппорт и обнаружил, что это был файл, который я искал:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
эхо 2 > /proc/sys/fs/suid_dumpable
}
я знал это /etc/sysctl.conf читается службой systemd-sysctl, так что следующее, что я хотел определить, было ли systemd-sysctl было начато раньше аппорт.
Я искал, есть ли аппорт-связанный сервис и нашел один:
vagrant@ubuntu-bionic:~$ systemctl единицы списка | grep аппорт
apport.service загружен, активен, завершен LSB: автоматическое создание отчета о сбое
Затем я проверил их взаимозависимость и обнаружил аппорт.сервис начинается после systemd-sysctl.service:
vagrant@ubuntu-bionic:~$ systemctl list-dependencies appport.service
аппорт.сервис
â ââsystem.slice
â ââsysinit.target
...
â ââsystemd-sysctl.service
...
...
бродяга@ubuntu-bionic:~$
Это означает systemd-sysctl.service правильно читает мои настройки ядро.core_pattern в /etc/sysctl.conf но настройка сразу перезаписывается аппорт.сервис.
Чтобы убедиться в этом, я добавил две строки в /etc/init.d/аппорт:
do_start()
{
...
...
# ПРИМЕЧАНИЕ(ywen): Запишите текущее значение в файл.
sysctl kernel.core_pattern > /home/vagrant/sysctl.kernel.core_pattern.txt
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
эхо 2 > /proc/sys/fs/suid_dumpable
# ПРИМЕЧАНИЕ(ywen): Добавить текущее значение в файл.
sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
}
Затем я перезагрузил виртуальную машину. Когда виртуальная машина снова заработала, я нашел файл /home/vagrant/sysctl.kernel.core_pattern.txt имел следующее содержание:
vagrant@ubuntu-bionic:~$ cat sysctl.kernel.core_pattern.txt
kernel.core_pattern = /var/tmp/core.%h.%e.%t
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
бродяга@ubuntu-bionic:~$
Так что, действительно, моя настройка была правильно прочитана, но затем перезаписана аппорт.