Então, a razão pela qual isso estava acontecendo era porque o script estava sendo executado no prompt sh, como no prompt do bash, onde o ulimit estava definido. Isso não é estranho? Nós mudamos o script para rodar no bash, e funciona bem agora.
Algo muito desconcertante está acontecendo, com relação à minha caixa.
Abaixo estão minhas configurações em /etc/sysctl.conf
:
kernel.core_pattern = core
kernel.core_uses_pid = 1
Em /etc/profile
, tenho isto:
ulimit -S -c unlimited >/dev/null 2>1
E eu confirmo tudo olhando:
cat /proc/sys/kernel/core_pattern
cat /proc/sys/kernel/core_uses_pid
Então, quando fazemos um ulimit -c
, ele retorna um valor de unlimited
.
quando fazemos um ulimit -S -c
, ele retorna um valor de unlimited
.
quando fazemos um ulimit -H -c
, ele retorna um valor de unlimited
.
E quando executo kill -6
em um processo em execução, não obtenho um núcleo.
Quando executo ulimit -c unlimited
e inicio o processo novamente, e executo kill -6
, ele gera um núcleo.
Alguém pode explicar qual é a diferença entre o limite suave e o limite rígido?
E deveríamos estar mudando o limite rígido?
Eu não gosto dessa situação, porque os núcleos às vezes são gerados e às vezes não.
Mesmo se eu mudar o limits.conf, eu realmente gostaria de entender o que estou fazendo.
Mais algumas coisas que preciso divulgar é que estou executando em um ambiente RHEL 6 (x86_64).
E que há espaço em disco suficiente e não é um processo DAEMON ou um programa setuid. E há permissões suficientes na pasta para criar novos arquivos, e não há arquivos / pastas chamados core no diretório de tempo de execução.
Então, a razão pela qual isso estava acontecendo era porque o script estava sendo executado no prompt sh, como no prompt do bash, onde o ulimit estava definido. Isso não é estranho? Nós mudamos o script para rodar no bash, e funciona bem agora.
Você pode ler sobre limites hard vs. soft na seção do manual do Bash em ulimit .
Como você diz que obtém um arquivo principal se reiniciar o programa a partir do seu shell, o problema é que o processo original não está sendo iniciado em um ambiente que lê /etc/profile
(esse arquivo é lido apenas para shells de login) . Você pode considerar adicionar ulimit -c unlimited
a qualquer script que esteja iniciando esse programa (antes da linha que inicia, é claro).