วิธีรับ core dump จาก apache เมื่อทำการแยกไฟล์


13

ฉันได้ทำตามคำแนะนำจากหลาย ๆ สถานที่ทางออนไลน์เกี่ยวกับวิธีการรับ core dump จาก apache เมื่อมันสร้าง segfault แต่ก็ยังปฏิเสธที่จะสร้าง dump

ฉันมี:

  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 directive หรือไม่? ควรเป็นของ apache
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ตั้งค่าไว้ใน/usr/lib/systemd/system/apache2.service(หรือสิ่งที่เรียกว่าในระบบของคุณ) หมายความว่า Apache มองหา/tmpสิ่งที่อยู่ภายในเช่น/tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/Apache จะไม่สามารถเขียนไปยัง dir นั้นและคุณจะไม่ได้ทิ้งแกนทั้งหมด (เนื่องจาก ไปยังsystemdไดเร็กทอรี tmp ที่มี 700 root เท่านั้น perms)

วิธีแก้ไขคือตั้งค่าPrivateTmp=falseหรือแก้ไขสิทธิ์ของไดเร็กทอรี systemd tmp หลังจากเซิร์ฟเวอร์เริ่มทำงาน

ฉันเสียเวลาไปกับการทำสิ่งนี้เพียงแค่ตอนนี้ในที่สุดก็ตระหนักว่าปัญหาคืออะไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.