ฉันจะกำหนดค่า logrotate เพื่อไม่ลบไฟล์บันทึกของฉันหลังจากการหมุนได้อย่างไร


24

มีวิธีทำเช่นนี้หรือไม่?


คุณบอกเราได้ไหมว่าทำไมคุณถึงต้องการทำเช่นนี้? อาจจะมีตัวเลือกอื่น ๆ ...
chmeee

ในกรณีของฉันจะเป็นการดีที่จะดาวน์โหลดบันทึกเก่าขนาดใหญ่ไปยังที่จัดเก็บข้อมูลภายนอกและเก็บบันทึกใหม่บนเซิร์ฟเวอร์ ดังนั้นฉันต้องการตัวแยกบันทึกอย่างง่าย
sekrett

2
กรณีการใช้งานของฉันสำหรับการกำหนดค่านี้คือ: ฉันต้องการเก็บบันทึกของฉันตลอดไปเนื่องจากฉันอาจต้องใช้เพื่อวัตถุประสงค์ในการตรวจสอบ แต่ฉันต้องการให้ไฟล์ของฉันถูกหมุนเพื่อให้บันทึกปัจจุบันไม่ใหญ่เกินไปและวัตถุหมุนได้ บีบอัด - มิฉะนั้นการสำรองข้อมูลบันทึกไปยังเซิร์ฟเวอร์ภายนอกนั้นยากเกินไปและการตรวจสอบไฟล์ก็ช้าเกินไปเช่นกัน
Rudolf Mayer

คำตอบ:


32

ใน logrotate.conf ของคุณ (หรือไฟล์ equrotent logrotate.d) ให้เปลี่ยนบรรทัดที่ระบุว่า "

rotate 10

(หมายเลขของคุณอาจแตกต่างกัน) เป็นจำนวนที่มากกว่า ที่จะบอกให้เก็บหลายวันของบันทึก คุณสามารถทำให้มัน 36500 ซึ่งจะมีอายุคุณ 100 ปี


6
เมื่อฉันทำเช่นนี้กับราสเบอร์รี่ปี่ (ราสเบียน) มันทำให้มันหยุดทุกคืน เมื่อฉันได้รับการเรียกใช้กระบวนการและเปิดไฟล์โดยใช้ซีเรียลคอนโซลและพบว่ามันพยายามที่จะเปลี่ยนชื่อ 100000 ไฟล์ที่ไม่มีอยู่ ดังนั้นจงระวังให้ดี น่าเสียดายที่ฉันไม่มีข้อมูลรายละเอียดเพิ่มเติม
คริสเตียน

0

ฉันกำลังมองหาสิ่งนี้เพื่อหมุนการสำรองข้อมูลฐานข้อมูลรายวันรายสัปดาห์และรายเดือน ดังนั้นฉันจึงหมุนไฟล์ทุกวัน แต่ให้หมุนไฟล์ทุกสัปดาห์และเหมือนกันทุกปี

ใช้ตัวเลือกการคัดลอก จากคู่มือ:

copy

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


นี่เป็นเช่นเดียวกับความคิดเห็นด้านล่าง ( serverfault.com/a/50186/275485 ) และไม่ได้ให้คำตอบที่ถูกต้อง การคัดลอกไม่ได้หมายความว่าไฟล์เก่าของคุณที่ถูกหมุนจะไม่ถูกลบ ..
Rudolf Mayer

-3

หลีกเลี่ยงจุดที่เกี่ยวข้องกับการหมุน ... ;-)

ดูเหมือนว่าคุณสามารถเพิ่มคำว่า 'คัดลอก' ลงในไฟล์ที่เหมาะสม (น่าจะเป็น /etc/logrotate.d) ตัวอย่างเช่นสคริปต์ logrotate apache2 จะมีลักษณะเช่นนี้:

/var/log/apache2/*.log {
    รายสัปดาห์
    missingok
    หมุน 52
    การบีบอัด
    delaycompress
    notifempty
    สำเนา
    sharedscripts
    postrotate
        ถ้า [-f "`. / etc / apache2 / envvars; echo $ {APACHE_PID_FILE: - / var / run / apache2.pid} `"]; แล้วก็
            /etc/init.d/apache2 รีโหลด> / dev / null
        Fi
    endscript
}

ลองและดูว่ามันทำในสิ่งที่คุณต้องการ


2
สมมติว่าเขาต้องการไฟล์ที่จะ "หมุน" แต่ไม่เคยลบไฟล์เก่าสิ่งนี้จะไม่ทำ การเพิ่ม "คัดลอก" ไปยัง config stanza หมายถึงไฟล์ต้นฉบับจะยังคงเติบโตอย่างต่อเนื่อง แต่ในที่สุดสำเนาที่เก่ากว่าของไฟล์จะถูกลบ ตามที่ฉันเข้าใจแล้ว "การคัดลอก" มีประโยชน์หลักเมื่อคุณคาดว่ากระบวนการอื่นจะตัด / ลบต้นฉบับ
Insyte

ตรงซึ่งเป็นสิ่งที่ฉันคิดว่าเขาขอ เขาถามหาวิธี "ไม่ลบไฟล์บันทึกของฉัน" โดยเฉพาะไม่ใช่วิธี "ไม่ลบไฟล์เก็บถาวรเก่าของไฟล์บันทึกของฉัน" คิดว่าผมควรจะระวังคำถามที่เกี่ยวข้องกับการเป็นเพียงแค่เรื่องและร่างกายไม่ ;-)
จัสตินเอลลิสัน


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