Apache ปฏิเสธที่จะเขียนลงในล็อกไฟล์หลังจากฉันลบเนื้อหาทั้งหมดด้วยตนเอง


9

ทำไม Apache ไม่ยอมเขียนลงไฟล์บันทึก ( ErrorLog/ / CustomLog) หลังจากฉันลบเนื้อหาด้วยตนเอง

มันจะไม่เขียนไปยังไฟล์บันทึกเหล่านั้นอีกจนกว่าจะรีสตาร์ท Apache

ทำไมเป็นกรณีนี้ ฉันจะกำจัดไฟล์บันทึกอย่างปลอดภัยโดยไม่ต้องรีสตาร์ท Apache ได้อย่างไร

ฉันมี Apache 2.2.14 บน Ubuntu 10.04


คุณจะลบเนื้อหาได้อย่างไร
Dom

@ Dom ฉันเพิ่งเปิดเป็นกลุ่มทำ "dG" (ซึ่งจะลบเนื้อหาทั้งหมด) จากนั้นบันทึกด้วย "! wq" ความเป็นเจ้าของ / กลุ่ม / สิทธิ์จะไม่เปลี่ยนแปลง
AtomicFault

3
@AtomicFault Prrrobably เพราะนั่นไม่ใช่วิธีการที่คุณควรจะบันทึก Apache หมุน คุณควรใช้สิ่งlogrotateที่ส่งสัญญาณการรีโหลด / รีสตาร์ทที่เหมาะสมไปยัง Apache (ดูคำตอบของ Pedro ด้านล่าง) Nickgrim กล่าวถึง "ทำไม" เบื้องหลังการหยุดบันทึกของคุณ - Apache ยังคงเขียนไปยังไอโหนดเก่า (ซึ่งไม่ได้เชื่อมต่อกับระบบไฟล์ทุกที่ที่คุณสามารถหาได้)
voretaq7

คำตอบ:


14

ฉันเพิ่งทำแบบทดสอบสั้น ๆ :

$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest

โปรดทราบว่าvimtestมีหมายเลขไอโหนดที่แตกต่างกันหลังจากแก้ไขและดังนั้นจึงเป็นไฟล์ที่แตกต่าง (แม้ว่าจะมีชื่อเดียวกับไฟล์เก่า)

ดังนั้นเมื่อคุณแก้ไขไฟล์ด้วย vim มันจะลบไฟล์เก่าและสร้างไฟล์ใหม่ด้วยชื่อเดียวกัน ปัญหาที่คุณเห็นเกิดจาก Apache ยังเขียนไปยังไฟล์เก่า (ถูกลบ) (คุณสามารถตรวจสอบได้ด้วยlsof)

หากคุณต้องการตัดทอนไฟล์บันทึกให้พิจารณาtruncate -s 0 /path/to/file.log(ซึ่งดูเหมือนจะตัดทอนแบบแทนที่)


2
echo>

8

ฉันขอแนะนำให้บังคับให้หมุนไฟล์บันทึกApache2ด้วย:

$ sudo logrotate -f /etc/logrotate.d/apache2

หากคุณดู/etc/logrotate.d/apache2คุณจะเห็นว่าการApache2กำหนดค่าจะต้องโหลดใหม่หลังจากลบไฟล์บันทึกด้วย:

$ sudo /etc/init.d/apache2 reload

บน Ubuntu คุณสามารถทำได้:

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