logrotate จัดการกับ“ ทุกวัน” ได้อย่างไร?


30

ตัดสินโดยการประทับเวลาในระบบของฉัน logrotate ทำการหมุนบันทึกประจำวันเมื่อ logrotate ทำงานโดย cron อย่างไรก็ตามถ้าฉันใช้มันเร็วกว่านั้นมันจะไม่หมุนไฟล์ logrotate จะรู้ได้อย่างไรว่าควรจะหมุนมันหรือไม่มันจะเก็บประวัติหรืออาจจะใช้การประทับเวลา?

คำตอบ:


32

/var/lib/logrotate.statusผมเชื่อว่ามันเป็นเนื้อหาของไฟล์รัฐซึ่งเป็นกรณีของฉันคือ แต่ละไฟล์มีหนึ่งบรรทัดซึ่งเป็นวันที่ซึ่งถูกหมุนครั้งล่าสุด หากคุณเรียกใช้ logrotate ในวันที่ไฟล์ที่กำหนดเนื่องจากการหมุนกำหนดจำนวนวันระหว่างวันที่ปัจจุบันและวันที่ในไฟล์ (1 สำหรับรายวัน, 7 สำหรับรายสัปดาห์และอื่น ๆ ) ไฟล์จะถูกหมุน

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


1
อืม .. ดังนั้นจะหมุนเฉพาะถ้า: date date> date in /var/lib/logrotate/status(ตามไฟล์ในกรณีของฉัน)
Kyle Brandt

2
ฉันคิดว่ามันจะทำอะไรได้เลยถ้าหากผ่านไป 24 ชั่วโมงนับตั้งแต่ทำงานครั้งสุดท้ายซึ่งทำงานออกมาโดยการตรวจสอบ mtime ของไฟล์สถานะ เมื่อตัดสินใจแล้วว่าทั้งวันผ่านไปแล้วและอาจทำอะไรได้ตามกฎหมายก็ทำให้การตัดสินใจรายวันรายสัปดาห์และอื่น ๆ ขึ้นอยู่กับฟิลด์วันที่ในไฟล์
MadHatter สนับสนุน Monica

4
ดูเหมือนว่าจะใช้วันที่ในไฟล์นั้น ฉันตั้งวันหนึ่งวันย้อนหลังในไฟล์สถานะและเรียกใช้ ... มันหมุนได้ ..
Kyle Brandt

เมื่อย้อนกลับไปและกระตุ้น logrotate ของฉันฉันคิดว่าฉันผิดและสิ่งที่คุณเขียนด้านบนนั้นถูกต้อง มันตัดสินใจว่าจะถูกเรียกใช้ในวันนี้โดยดูที่การประทับเวลาของไฟล์สถานะ ถ้ามันไม่ได้มันจะแยกวันที่ของการหมุนครั้งล่าสุดจากไฟล์สถานะและดำเนินการตาม ฉันเพิ่งโกหก logrotate กับ vi แล้วแตะ -t เพื่อชักชวนว่ามันวิ่งที่ 2355 เมื่อวานนี้เมื่อมันหมุนบันทึก munin ของฉัน เรียกใช้อีกครั้งแม้ว่าจะใช้เวลาน้อยกว่า 24 ชั่วโมง แต่จะหมุนไฟล์เหล่านั้นออกและอัปเดตไฟล์สถานะตามนั้น
MadHatter รองรับโมนิก้า

ฉันได้อัปเดตคำตอบของฉันเป็นความเข้าใจปัจจุบันของฉันแล้วเนื่องจากชุดการทดสอบที่ฉันเพิ่งเรียกใช้ (หั่นส่วนเล็ก ๆ ของฉันบันทึกแปดวิธีจากวันอาทิตย์ แต่ใครสนใจ!)
MadHatter รองรับโมนิก้า

11

จากหน้า man logrotate:

โดยปกติ logrotate จะทำงานเป็นงาน cron รายวัน มันจะไม่แก้ไขบันทึกมากกว่าหนึ่งครั้งในหนึ่งวันเว้นแต่เกณฑ์สำหรับบันทึกนั้นขึ้นอยู่กับขนาดของบันทึกและ logrotate กำลังทำงานมากกว่าหนึ่งครั้งในแต่ละวันหรือยกเว้นว่ามีการใช้ตัวเลือก -f หรือ -force


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