私は、segfaultを生成しているときにApacheからコアダンプを取得する方法について、オンラインの多くの場所からの指示に従いましたが、それでもダンプの生成を拒否します。
私が持っています:
CoreDumpDirectory
ディレクティブをhttpd.conf
ファイルに追加し、/tmp
に設定しましたulimit -c unlimited
echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
を使用してダンプのパターンを提供echo 0 > /proc/sys/kernel/core_uses_pid
も実行したHttpdは再起動されましたが、まだダンプは作成されていません。
CentOS 5.8 x64をhttpd-2.2.3-65.el5.centos.3
とphp-5.3.20-13.el5.art
で実行しています
どんな助けでも大歓迎です!
私の答えはこれです:
ディレクティブを次のように設定します
CoreDumpDirectory /tmp/mycoredump
ディレクトリを作成します。
mkdir -p /tmp/mycoredump
所有権をディレクトリwww-dataまたはhttpdに割り当てます
chown -R www-data:www-data /tmp/mycoredump
権限を次のように設定します。
chmod 777 /tmp/mycoredump
Apacheを再起動します。
service Apache2 restart
PrivateTmp=true
が/usr/lib/systemd/system/Apache2.service
(またはシステムで呼び出されているもの)に設定されている場合、Apacheが実際に/tmp
を/tmp/systemd-private-c27fc5b152d546159d675e170641529b-Apache2.service-IcEt0m/
などの内部で検索することを意味することに注意してください。そのディレクトリに書き込むことができず、コアがダンプされません(systemd
tmpディレクトリに700ルートのみの権限があるため)。
解決策は、PrivateTmp=false
を設定するか、サーバーの起動後にsystemd tmpディレクトリの権限を変更することです。
何時間も無駄にして、たった今、ようやく問題が何であるかを理解しました。