В обычной ситуации достаточно указать в
/etc/sysctl.conf параметры
kernel.core_uses_pid = 1
kernel.core_pattern = /var/tmp/core.%p.%e.%s
fs.suid_dumpable = 1
Выполнить
sysctl -p;
ulimit -c unlimited
Перезапустить интересуйщий нас процесс командой service и убидиться в том, что параметры успешно применились командой
cat /proc/`pgrep process_name`/limits
Как показала практика описанного набора действий бывает не всегда достаточно. В частности, если SysV скрипт использует функцию
daemon(), описанную в
/etc/rc.d/init.d/functions, то заданный ранее явно лимит переопределяется следющей строкой
corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"
Полагаясь на ее описание, необходимо для сервисов, использующих для запуска функцию
daemon(), дополнительно определять в их SysV конфигурационном файле, обычно расположенном в
/etc/sysconfig, директивку
DAEMON_COREFILE_LIMIT=unlimited
Например, одним из сервисов, использующий подход с
daemon(), является httpd. Согласно его init-скрипту конфигурационный файл расположен в
/etc/sysconfig/httpd. Результирующий набор команд будет выглядеть
cat <<EOF >> /etc/sysconfig/httpd
DAEMON_COREFILE_LIMIT=unlimited
EOF
service httpd restart