Como definir o local do arquivo de despejo principal (e nome)?

12

Estou no CentOS 6, tentando habilitar os despejos principais de um aplicativo que estou desenvolvendo. Eu coloquei:

ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null

no meu perfil bash, mas um dump principal ainda não foi gerado (em um novo terminal).

Eu também mudei meu /etc/security/limits.conf para que os limites de soft sejam zero para todos os usuários.

Como defino a localização dos arquivos principais a serem gerados? Eu queria especificar o local e acrescentar a hora em que o dump foi gerado, como parte do nome do arquivo?

    
por user997112 26.03.2015 / 18:53

1 resposta

20

Para definir a localização dos dumps principais no CentOS 6, você pode editar /etc/sysctl.conf . Por exemplo, se você quiser despejos principais em /var/crash :

kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t

Onde as variáveis são:

%e is the filename
%g is the gid the process was running under
%p is the pid of the process
%s is the signal that caused the dump
%t is the time the dump occurred
%u is the uid the process was running under

Além disso, você precisa adicionar /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'

Agora, aplique novas alterações:

$ sysctl -p

Mas há uma ressalva por aqui. Se o parâmetro do kernel kernel.core_pattern for sempre redefinido e sobrescrito na reinicialização para a seguinte configuração, mesmo quando um valor for especificado manualmente em /etc/sysctl.conf :

|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e

Em resumo, quando abrtd.service inicia kernel.core_pattern é sobrescrito automaticamente pelo sistema instalado abrt-addon-ccpp . Existem duas maneiras de resolver isso:

  1. Definindo a opção DumpLocation no arquivo de configuração /etc/abrt/abrt.conf . O diretório de destino pode ser especificado definindo DumpLocation = /var/crash no arquivo de configuração /etc/abrt/abrt.conf , e o valor exibido de sysctl kernel.core_pattern é o mesmo, mas na verdade o arquivo principal será criado no diretório em /var/crash .

    Além disso, se você tiver o SELinux ativado, precisará executar:

    $ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?"  
    $ setsebool -P abrt_anon_write 1
    

    E, finalmente, reinicie o abrtd.service :

    $ service abrtd.service restart
    
  2. Pare o serviço abrtd. kernel.core_pattern não será sobrescrito. - (Eu nunca testei).

por 27.03.2015 / 09:06