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).