web-dev-qa-db-ja.com

セグメンテーション違反時にApacheからコアダンプを取得する方法

私は、segfaultを生成しているときにApacheからコアダンプを取得する方法について、オンラインの多くの場所からの指示に従いましたが、それでもダンプの生成を拒否します。

私が持っています:

  1. CoreDumpDirectoryディレクティブをhttpd.confファイルに追加し、/tmpに設定しました
  2. 実行済みulimit -c unlimited
  3. echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_patternを使用してダンプのパターンを提供
  4. echo 0 > /proc/sys/kernel/core_uses_pidも実行した

Httpdは再起動されましたが、まだダンプは作成されていません。

CentOS 5.8 x64をhttpd-2.2.3-65.el5.centos.3php-5.3.20-13.el5.artで実行しています

どんな助けでも大歓迎です!

13
chrismcb

私の答えはこれです:

  1. ディレクティブを次のように設定します

    CoreDumpDirectory /tmp/mycoredump

  2. ディレクトリを作成します。

    mkdir -p /tmp/mycoredump

  3. 所有権をディレクトリwww-dataまたはhttpdに割り当てます

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

  4. 権限を次のように設定します。

    chmod 777 /tmp/mycoredump

  5. Apacheを再起動します。

    service Apache2 restart

7

PrivateTmp=true/usr/lib/systemd/system/Apache2.service(またはシステムで呼び出されているもの)に設定されている場合、Apacheが実際に/tmp/tmp/systemd-private-c27fc5b152d546159d675e170641529b-Apache2.service-IcEt0m/などの内部で検索することを意味することに注意してください。そのディレクトリに書き込むことができず、コアがダンプされません(systemd tmpディレクトリに700ルートのみの権限があるため)。

解決策は、PrivateTmp=falseを設定するか、サーバーの起動後にsystemd tmpディレクトリの権限を変更することです。

何時間も無駄にして、たった今、ようやく問題が何であるかを理解しました。

0