บันทึกและเปิดไฟล์


21

logrotate จัดการกับไฟล์ที่เปิดอย่างไร สามารถหมุนไฟล์หมุนเวียนในกระบวนการที่เปิดอยู่ได้หรือไม่

คำตอบ:


7

สำหรับแอปพลิเคชั่นที่ไม่รับสัญญาณจาก logrotate ตามที่อธิบายไว้ใน Rory ฉันใช้วิธีการสองสามวิธี

  1. ใช้ตัวเลือกการคัดลอก
  2. เพิ่มคำสั่งหลังการหมุนเพื่อเริ่มบริการ

การตัดสินใจว่าจะใช้ไฟล์ใดขึ้นอยู่กับขนาดของไฟล์บันทึกและความจำเป็นในการใช้ไฟล์บันทึกอย่างราบรื่น นั่นจะเป็นการวิเคราะห์ความเสี่ยงในส่วนของคุณเอง อย่างไรก็ตามเพื่อให้เป็นตัวอย่างฉันใช้การรีสตาร์ท post-rotation ในบางล็อกที่จริง ๆ แล้วฉันควรใช้ copytruncate อย่างไรก็ตามไฟล์มักจะมีหลายกิ๊กและการคัดลอกอาจใช้เวลานานพอที่จะเสียวินาทีหรือสองในแต่ละคืนได้ดีกว่า


ขออภัยที่ beign สายเกินไป แต่ฉันคิดว่าฉันสามารถประหยัดเวลาให้กับผู้อื่นที่กำลังมองหาปัญหานี้ ลองดูวิธีอื่นในการแก้ปัญหานี้ unix.stackexchange.com/a/122942/189725
วิกเตอร์

17

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

copytruncate
              Truncate  the original log file to zero size in place after cre‐
              ating a copy, instead of moving the old log file and  optionally
              creating  a new one. 

1
มันเหมือนกับการทำ "cp something.log something.log.1;:> something.log" ดังนั้นไฟล์จะว่างเปล่า แต่ไฟล์แฮงเอาท์มันจะไม่แตก ปัญหาคือเวลาระหว่าง 2 คำสั่งคุณอาจหลวมท่อนของไฟล์ได้
รัศมี

5

logrotate จะส่งสัญญาณที่ถูกต้องไปยังกระบวนการเพื่อบอกให้เปิดไฟล์บันทึกอีกครั้ง มันทำงานนอกกรอบสำหรับสิ่งต่าง ๆ เช่น apache หรือ mysql

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

หากคุณไม่สามารถเปลี่ยนโปรแกรมได้คุณสามารถดูว่า daemon มีวิธีในการล้างข้อมูลบันทึกโดยอัตโนมัติหรือไม่ หรือเพิ่ม prerotate ที่หยุดเซิร์ฟเวอร์และ postrotate ที่เริ่มต้นอีกครั้ง


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