Назад | Перейти на главную страницу

Почему Apache в Debian Wheezy не создает дамп ядра?

Я видел несколько вопросов по этому поводу и, должно быть, пробовал почти все, но все же Apache не будет создавать дамп ядра на рабочем сервере.

Это настройка, которая действительно работает на моей виртуальной машине:

apt-get install gdb apache2-dbg php5-dbg libapr1-dbg libaprutil1-dbg

mkdir /tmp/apache-coredumps
chmod g+w,o+w /tmp/apache-coredumps/

cat <<EOF > /etc/apache2/conf.d/debugging
CoreDumpDirectory /tmp/apache-coredumps
EOF

ulimit -c unlimited
apache2ctl -t && service apache2 restart

На виртуальной машине с помощью «kill -11» я вижу «возможный дамп памяти в / tmp / apache-coredumps» в файле журнала, но эта часть отсутствует на рабочем сервере.

Вот что я тоже пробовал:

Сервер и виртуальная машина - это Debian Wheezy с Apache 2.2.22 (mpm-prefork), PHP 5.4.45.

Что еще может блокировать создание дампа ядра?

Надеюсь, это кому-то поможет.

Обратите внимание, что если у вас есть PrivateTmp=true установить в вашем /usr/lib/systemd/system/apache2.service (или как он там называется в вашей системе), то есть Apache действительно ищет /tmp внутри что-то вроде /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache не сможет писать в этот каталог, и вы не получите дамп ядер (из-за systemd tmp, имеющий 700 разрешений только для root).

Решение состоит в том, чтобы установить PrivateTmp=false или измените разрешение каталога systemd tmp после запуска сервера.

Я потратил на это часы, чтобы только сейчас наконец понять, в чем проблема.

man core есть список, который вы должны просмотреть. Первый вариант выглядит вероятным, поскольку /var/cache/apache2 обычно доступен для записи только root, как и /var/www, который является обычным домашним каталогом пользователя www-data в debian:

   There are various circumstances in which a core dump file is  not  pro-
   duced:

   *  The  process  does  not have permission to write the core file.  (By
      default the core file is called core, and is created in the  current
      working  directory.   See below for details on naming.)  Writing the
      core file will fail if the directory in which it is to be created is
      nonwritable,  or  if  a  file  with  the same name exists and is not
      writable or is not a regular file (e.g., it is a directory or a sym-
      bolic link).