Come ottenere un dump core da apache durante la segfaulting


13

Ho seguito le istruzioni di molte località online su come ottenere un dump core da apache quando sta producendo un segfault, ma si rifiuta ancora di generare il dump.

Io ho:

  1. Aggiunta la CoreDumpDirectorydirettiva nel httpd.conffile e impostata su/tmp
  2. eseguito ulimit -c unlimited
  3. Fornito il modello per l'utilizzo dei dump echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
  4. Corse anche echo 0 > /proc/sys/kernel/core_uses_pid

Httpd è stato riavviato, ma non è stato ancora creato alcun dump.

Uso CentOS 5.8 x64 con httpd-2.2.3-65.el5.centos.3ephp-5.3.20-13.el5.art

Qualsiasi aiuto sarebbe molto apprezzato!


Apache ha qualche permesso per scrivere nel file specificato nella direttiva CoreDumpDirectory? Dovrebbe essere di proprietà di Apache.
Valentin Bajrami,

L'ho impostato su / tmp che è pubblicamente scrivibile, ma proverò altrove e gli darò la proprietà di apache
chrismcb

Grazie - ha prodotto una discarica, ma non nel posto in cui l'ho impostata! Ho impostato il CoreDumpDirectoryto /tmp/dumpsed è stato scaricato su /tmp... ora
attivo

Sono contento che tu l'abbia capito!
Valentin Bajrami,

Risposte:


7

La mia risposta è questa:

  1. Impostare la direttiva come segue

    CoreDumpDirectory /tmp/mycoredump

  2. Crea la directory:

    mkdir -p /tmp/mycoredump

  3. Assegnare la proprietà alla directory www-data o httpd

    chown -R www-data:www-data /tmp/mycoredump

  4. Imposta le autorizzazioni su:

    chmod 777 /tmp/mycoredump

  5. Riavvia Apache:

    service apache2 restart


Sì, ho fatto proprio questo, ma alla fine è stato /tmpscaricato!
chrismcb,

6
Non è mai una buona idea chmod 777nulla
sendmoreinfo

1
@sendmoreinfo Ma cosa succede se il tuo caso d'uso sta facendo qualcosa di completamente modificabile ed eseguibile al mondo esterno? ;-)
avgvstvs

8
Ti è permesso spararti al piede, ma non predicare questo.
sendmoreinfo,

0

Nota che se hai PrivateTmp=trueimpostato nel tuo /usr/lib/systemd/system/apache2.service(o come si chiama sul tuo sistema), il che significa che Apache cerca effettivamente /tmpqualcosa come tale /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache non sarà in grado di scrivere in quella directory e non verrai scaricato affatto (a causa alla systemddirectory tmp con 700 permanenti solo root).

La soluzione consiste nell'impostare PrivateTmp=falseo modificare l'autorizzazione della directory tmp di systemd dopo l'avvio del server.

Ho sprecato ore su questo solo per rendermi conto solo adesso del problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.