segfaulting 할 때 아파치에서 코어 덤프를 얻는 방법


13

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 64를 실행하는거야 httpd-2.2.3-65.el5.centos.3php-5.3.20-13.el5.art

어떤 도움이라도 대단히 감사하겠습니다!


Apache에 CoreDumpDirectory 지시문에 지정한 파일에 쓸 수있는 권한이 있습니까? 아파치 소유해야합니다.
Valentin Bajrami

공개적으로 쓸 수있는 / tmp로 설정했지만 다른 곳에서 시도하고 아파치에 소유권을 부여 할 것입니다.
chrismcb

고마워-그것은 덤프를 생산했지만, 내가 설정 한 장소가 아닙니다! 나는 설정 CoreDumpDirectory/tmp/dumps그것은 덤프 /tmp디버깅에 ... 지금
chrismcb

알아서 다행입니다!
Valentin Bajrami

답변:


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
당신은 발로 자신을 쏠 수 있습니다, 단지 이것을 설교하지 마십시오.
sendmoreinfo

0

아파치가 실제로 내부에서 찾는 것을 의미하는 (또는 시스템에서 호출 된 무엇이든) PrivateTmp=true설정 하면 아파치는 해당 디렉토리에 쓸 수 없으며 코어가 전혀 덤프되지 않습니다. 받는 tmp 디렉토리 700 루트 전용 파마를 가짐)./usr/lib/systemd/system/apache2.service/tmp/tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/systemd

해결책은 PrivateTmp=false서버가 시작된 후 systemd tmp 디렉토리의 권한을 설정 하거나 수정하는 것입니다.

나는 지금 막 문제가 무엇인지 마침내 깨닫기 위해 몇 시간을 낭비했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.