题 如何在segfaulting时从apache获取核心转储


我已经按照许多在线位置的说明,了解如何在生成段错误时从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.3 和 php-5.3.20-13.el5.art

任何帮助将非常感激!


11
2018-01-18 15:38




apache是​​否有权写入您在CoreDumpDirectory指令中指定的文件?它应该由apache拥有。 - Valentin Bajrami
我把它设置为可以公开写入的/ tmp,但我会尝试其他地方并将其归于apache - chrismcb
谢谢 - 这确实产生了转储,但不是在我设置它的地方!我设定了 CoreDumpDirectory 至 /tmp/dumps 并倾倒到 /tmp...现在开始调试 - chrismcb
恭喜你弄明白了! - Valentin Bajrami


答案:


我的答案是这样的:

  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
2018-01-18 15:53



是的,我做到了这一点,但最终倾销了 /tmp 无论如何! - chrismcb
这绝不是一个好主意 chmod 777 什么 - sendmoreinfo
@sendmoreinfo但是,如果您的用例正在为外部世界制作完全可修改且可执行的内容,该怎么办? ;-) - avgvstvs
你被允许在脚下射击自己,只是不要传播这个。 - sendmoreinfo