Як отримати основний дамп з apache при segfaulting


13

Я дотримувався вказівок з багатьох локацій в Інтернеті про те, як отримати основний дамп з apache, коли він виробляє segfault, але він все ще відмовляється генерувати дамп.

Я маю:

  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

Будь-яка допомога буде дуже вдячна!


Чи має апарат apache дозвіл на запис у файл, який ви вказали в директиві CoreDumpDirectory? Він повинен належати апачу.
Валентин Байрамі

Я встановив його на / tmp, що є загальнодоступним для запису, але я спробую десь інше і надам йому право власності на apache
chrismcb

Спасибі - це створило смітник, проте не в тому місці, де я його встановив! Я встановив , CoreDumpDirectoryщоб /tmp/dumpsі скидали в /tmp... тепер налагоджування
chrismcb

Радий, що ви зрозуміли це!
Валентин Байрамі

Відповіді:


7

Моя відповідь така:

  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


Так, я робив саме це, але це врешті-решт закинулось на місце /tmp будь-який!
chrismcb

6
Це ніколи не підходить chmod 777ні до чого
sendmoreinfo

1
@sendmoreinfo Але що робити, якщо ваш випадок використання робить щось цілком видозмінене та виконане для зовнішнього світу? ;-)
avgvstvs

8
Вам дозволяється стріляти собі в ногу, тільки цього не проповідуйте.
надішліть info

0

Зауважте, що якщо ви PrivateTmp=trueвстановили у вашій системі /usr/lib/systemd/system/apache2.service(або як вона називається у вашій системі), тобто Apache насправді шукає /tmpвсередині щось на зразок /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache не зможе записатись у цей dir, і ви не отримаєте ядра взагалі (належно до systemdкаталогу tmp, що містить 700 кореневих perms).

Рішенням є або встановити, PrivateTmp=falseабо змінити дозвіл на системний каталог tmp після запуску сервера.

Я витрачав години на це, щоб лише зараз нарешті зрозуміти, в чому проблема.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.