15

I've followed instructions from many locations online on how to get a core dump from apache when it is producing a segfault, but it still refuses to generate the dump.

I have:

  1. Added the CoreDumpDirectory directive into the httpd.conf file and set it to /tmp
  2. Executed ulimit -c unlimited
  3. Provided the pattern for dumps using echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
  4. Also ran echo 0 > /proc/sys/kernel/core_uses_pid

Httpd has been restarted, but still no dumps created.

I'm running CentOS 5.8 x64 with httpd-2.2.3-65.el5.centos.3 and php-5.3.20-13.el5.art

Any help would be much appreciated!

4
  • Does apache have any permission to write to the file you specified in CoreDumpDirectory directive? It should be owned by apache. Commented Jan 18, 2013 at 15:43
  • I've set it to /tmp which is publicly writable, but I'll try somewhere else and give it ownership to apache Commented Jan 18, 2013 at 15:48
  • Thanks - that did produce a dump, however not in the place I set it! I set the CoreDumpDirectory to /tmp/dumps and it dumped to /tmp... now on with debugging Commented Jan 18, 2013 at 15:53
  • Glad you figured it out! Commented Jan 18, 2013 at 15:54

3 Answers 3

7

My answer is this:

  1. Set up the directive as follow

    CoreDumpDirectory /tmp/mycoredump

  2. Create the directory:

    mkdir -p /tmp/mycoredump

  3. Assign ownership to the directory www-data or httpd

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

  4. Set permissions to:

    chmod 777 /tmp/mycoredump

  5. Restart Apache:

    service apache2 restart

5
  • Yes, I did just about that, but it ended up dumping into /tmp anyway! Commented Jan 18, 2013 at 15:54
  • 6
    It's never a good idea to chmod 777 anything Commented Jan 19, 2013 at 19:54
  • 1
    @sendmoreinfo But what if your use case is making something fully modifiable and executable to the outside world? ;-) Commented Aug 13, 2015 at 13:50
  • 8
    You are allowed to shoot yourself in the foot, just don't preach this. Commented Aug 13, 2015 at 21:53
  • If I run these, it kills Apache and makes it unable to start... CoreDumpDirectory does not appear to be a valid Apache directive. Commented Oct 17, 2020 at 2:31
2

Note that if you have PrivateTmp=true set in your /usr/lib/systemd/system/apache2.service (or whatever it's called on your system), meaning Apache actually looks for /tmp inside something like /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache won't be able to write to that dir and you won't get cores dumped at all (due to the systemd tmp directory having 700 root-only perms).

The solution is to either set PrivateTmp=false or modify the permission of the systemd tmp directory after the server starts.

I wasted hours on this to only just now finally realize what the problem was.

2
  • 1
    Oh you have no idea how many hours I've wasted on this. Thanks for posting your answer! Commented Jun 2, 2020 at 10:35
  • Or don't use a /tmp directory at all and store them elsewhere, like /var/coredumps/. Commented Mar 7, 2023 at 0:30
0

Everyone forgot to mention setting the follwing in your /usr/lib/systemd/system/apache2.service

[Service] LimitCORE=infinity 

You'll also need to set PrivateTmp=false there as mentioned in the other comments

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.