วิธีการหลีกเลี่ยงการโหลด apache เมื่อหมุนบันทึก?


25

ฉันใช้ logrotate เพื่อหมุน Apache access-, error- และ rewrite-logs ไฟล์ปรับแต่งของฉันมีลักษณะเช่นนี้:

/apache/*log {
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
    lastaction
     /bin/apache reload
    endscript
}

ปัญหาของฉันคือเมื่อใดก็ตามที่มีการหมุนเกิดขึ้น Apache จะต้องโหลดซ้ำเพราะ Apache ไม่ได้เขียนอะไรเพิ่มเติมในไฟล์บันทึกที่เพิ่งหมุน มีวิธีการหลีกเลี่ยง Apache reloads ทุกครั้งที่ logrotate หมุนหรือไม่?

คำตอบ:


42

เหตุผลที่ apache ต้องการการรีโหลดคือเมื่อเปิดไฟล์มันจะได้รับการจัดการไฟล์จากนั้นและมันจะเขียนต่อไปยัง filehandle นั้น เมื่อคุณย้ายไฟล์จะไม่เห็นว่ามันแค่เขียนต่อไปยังหมายเลขอ้างอิงเดียวกัน เมื่อคุณทำการรีโหลดมันจะเปิดไฟล์อีกครั้งและรับหมายเลขอ้างอิงใหม่

เพื่อหลีกเลี่ยงการโหลดซ้ำแทนที่จะย้ายไฟล์คุณสามารถคัดลอกและล้างไฟล์เก่า ด้วยวิธีนี้อาปาเช่สามารถเขียนไปยังไฟล์เดียวกันได้ คุณทำได้โดยการเพิ่มตัวเลือก "copytruncate" ลงในไฟล์กำหนดค่า logrotate เช่นนี้:

/apache/*log {
    copytruncate
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
}

ขอบคุณสำหรับคำตอบ. ดังนั้นฉันเดาว่าเมื่อฉันเพิ่มlastaction echo "" | /apache/*log endscriptfilehandle ไม่ "หายไป"?
พิณ

3
ขออภัยฉันควรจะพูดว่า "copytruncate" แทนที่จะเป็น "copy" ถ้าอย่างนั้นคุณไม่ต้องการสิ่งสุดท้ายเลย ฉันโทษว่ามีเลือดมากเกินไปในกระแสคาเฟอีนของฉัน :-)
Jenny D

ใช้งานได้เหมือนมีมนต์เสน่ห์ :)
พิณ

4
@ ฮาร์ปต้องระวังlogrotatedoc พูดว่า: "โปรดทราบว่ามีการแบ่งเวลาเล็กน้อยระหว่างการคัดลอกไฟล์และตัดทอนดังนั้นข้อมูลการบันทึกบางอย่างอาจสูญหายไป"
Totor

นอกเหนือจากความเป็นไปได้ที่ข้อมูลบางอย่างอาจสูญหายจะมีข้อเสียอื่น ๆ ที่ทราบถึงการใช้งานcopytruncateหรือไม่?
Leo Galleguillos

5

ฉันแนะนำให้คุณใช้http://cronolog.org/

นี่คือวิธีที่ฉันใช้:

CustomLog     "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined

1
การวางท่อกับโปรแกรมภายนอกอาจเป็นปัญหาหากมีปริมาณการใช้งานจำนวนมากไปยังเว็บเซิร์ฟเวอร์ แต่จะหลีกเลี่ยงปัญหา filehandle อย่างเรียบร้อย
เจนนี่ D

ดูเหมือนเป็นทางเลือกที่ดี ลำดับเวลาบีบอัดได้ทันทีหรือไม่
พิณ

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