Рассмотрим этот простой «переданный по конвейеру» основной шаблон:
vagrant@myhost:~$ cat /proc/sys/kernel/core_pattern
|/var/core-manager.sh %t
с таким же упрощенным сценарием основного менеджера:
vagrant@myhost:~$ cat /var/core-manager.sh
#!/bin/bash
(
file=/tmp/mycore.$1
cat > $file < /dev/stdin
)
Теперь воспроизведите и извлеките дамп ядра в linux host:
vagrant@myhost:~$ ls -lrt /tmp/mycore*
total 0
vagrant@myhost:~$ ulimit -c unlimited
vagrant@myhost:~$ sleep 100 &
[1] 16647
vagrant@myhost:~$ kill -SIGSEGV 16647
[1]+ Segmentation fault (core dumped) sleep 100
vagrant@myhost:~$ ls -lrt /tmp/mycore*
-rw-rw-rw- 1 root root 385024 Jan 28 18:42 /tmp/mycore.1580233332
Теперь воспроизведите его внутри контейнера, скажем, busybox:
(основной шаблон, как многие из вас могут знать, наследуется контейнером, и хотя ulimit - нет, потому что это зависит от вызывающей оболочки, вероятно, «unlimited» - это значение по умолчанию в оболочках busybox, потому что дело в том, что у меня есть неограниченный ulimit для размера ядра внутри контейнера, делающего «ничего», и это то, что я на самом деле хочу) .
vagrant@myhost:~$ docker run -it --rm busybox
/ # cat << EOF > /var/core-manager.sh
> #!/bin/bash
> (
> file=/tmp/mycore.$1
> cat > $file < /dev/stdin
> )
> EOF
/ # chmod a+x /var/core-manager.sh
/ # cat /proc/sys/kernel/core_pattern
|/var/core-manager.sh %t
/ # ulimit -c
unlimited
/ # sleep 100 &
/ # kill -SIGSEGV %1
/ #
[1]+ Segmentation fault (core dumped) sleep 100
/ # ls -lrt /tmp/mycore*
ls: /tmp/mycore*: No such file or directory
Я добавил + x разрешений к скрипту главного менеджера, на всякий случай, однако я не думаю, что это необходимо (я заблудился относительно того, насколько асинхронные системные задачи, такие как дамп ядра) ведут себя). В любом случае, как вы можете видеть, дамп ядра не создается .
Регулярное расположение пути для шаблона ядра прекрасно работает в контейнерах (конечно, на хосте), тогда это заставляет меня думать, что что-то в docker ограничивает использование этого типа «пипетированных» шаблонов ядра. Или, может быть, это то, чего я сейчас не вижу.
Есть идеи? Большое спасибо!