หมุนไฟล์ที่เปิดอยู่และเขียนตลอดเวลา


10

ฉันมีแอพพลิเคชั่น linux ที่เขียนข้อมูลการบันทึกลงในไฟล์บันทึกอย่างต่อเนื่องเช่น /var/log/application.log. เนื่องจากแอปพลิเคชันไม่หมุนไฟล์โดยอัตโนมัติไฟล์บันทึกนี้สามารถมีขนาดถึงกิกะไบต์ในบางสัปดาห์ดังนั้นฉันจึงต้องการหมุนไฟล์นี้อย่างถูกต้อง

ข้อกังวลหลักของฉันคือการหมุนไฟล์ที่แอปพลิเคชันเปิดอยู่ตลอดเวลาฉันอาจต้อง:

  1. ย้ายไฟล์ไปยังแบบฟอร์มที่หมุน /var/log/application.log -> /var/log/application.log.2013-01-28

  2. /var/log/application.logสร้างที่ว่างเปล่า Obs:ณ จุดนี้กระบวนการของแอปพลิเคชันยังคงเขียนอยู่/var/log/application.log.2013-01-28

  3. เปลี่ยน file descriptor ของกระบวนการแอ็พพลิเคชันให้ชี้กลับไปเป็น /var/log/application.log

ดังนั้นฉันถูกไหม ถ้าเป็นเช่นนั้นฉันจะทำสิ่งนี้ได้อย่างไร (ส่วนใหญ่เป็นการเปลี่ยนส่วนของตัวอธิบายไฟล์)

ถ้าฉันไม่ใช่วิธีที่ถูกต้องคืออะไรและทำอย่างไร?


คุณต้องการล้างไฟล์หรือหมุนไฟล์หรือไม่?
ewwhite

แอปพลิเคชันอะไร แอปพลิเคชันต้องให้การสนับสนุนในการดำเนินการอย่างถูกต้อง (มิฉะนั้นคุณสามารถเป็นสิ่งที่น่าเกลียดมาก - แนบกับกระบวนการเปิดไฟล์dup2ใหม่ตัวบ่งชี้ใหม่ทับตัวเก่าจากนั้นปิดตัวบ่งชี้ใหม่)
David Schwartz

aproach Schwartz ที่น่าสนใจ ฉันอยากรู้ว่าจะเห็นว่าในการกระทำและจะเล่นกับมันในขณะที่ อย่างไรก็ตามแอปพลิเคชันอยู่ในบ้านและฉันกำลังมองหาวิธีแก้ปัญหาทั่วไปเพิ่มเติม ฉันชอบคำตอบของ kormoc
Bruno Polaco

@ whitewhite ฉันต้องหมุนมันฉันไม่สามารถที่จะสูญเสียข้อมูลบันทึกได้
Bruno Polaco

คำตอบ:


11

เขียนการกำหนดค่าที่logrotateจะใช้copytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.

สิ่งที่น่าสนใจคือการตัดทอนไฟล์หลังจากการคัดลอกดูเหมือนว่าจะค่อนข้างฉลาดแม้จะมีการสูญเสียข้อมูล ฉันไม่ได้สังเกตเห็นตัวเลือกนี้เมื่อ logrotate ขอบคุณสำหรับความเข้าใจ :)
บรูโน่ Polaco

1

แอปพลิเคชันส่วนใหญ่ตอบสนองต่อสัญญาณเช่นSIGHUPและจะปิดและเปิดไฟล์บันทึกของตนอีกครั้งเมื่อได้รับสัญญาณ ตรวจสอบเอกสารประกอบการใช้งานของคุณเพื่อรับสัญญาณที่ถูกต้องในการส่ง


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