Rain WikiWindows · Linux · Android

logrotate

บริการดิสทริบิวชัน Linux ส่วนใหญ่

logrotate เป็นยูทิลิตีบน Linux ที่ทำหน้าที่หมุนเวียน บีบอัด และลบไฟล์บันทึก (log files) เพื่อไม่ให้พื้นที่ดิสก์เต็ม โดยปกติจะทำงานวันละครั้งผ่าน systemd timer หรือ cron job และจะอ่านค่าจาก /etc/logrotate.conf รวมถึงกฎเฉพาะของแต่ละแพ็กเกจใน /etc/logrotate.d/

1ตัวอย่างกฎทั่วไป

กฎหนึ่งข้อจะระบุชื่อไฟล์บันทึกหนึ่งไฟล์หรือมากกว่า พร้อมด้วยคำสั่งต่างๆ เช่น daily หรือ weekly (ความถี่ในการหมุนเวียน), rotate 7 (จำนวนไฟล์เก่าที่จะเก็บไว้), compress (บีบอัดไฟล์เก่าด้วย gzip), missingok (ไม่แสดงข้อผิดพลาดหากไม่มีไฟล์), notifempty (ข้ามไฟล์บันทึกที่ว่างเปล่า) และ postrotate ... endscript (คำสั่งที่จะรันหลังจากหมุนเวียนไฟล์เสร็จสิ้น เช่น เพื่อเปิดไฟล์บันทึกใหม่อีกครั้ง)

2copytruncate

โปรแกรมบางตัวยังคงเขียนข้อมูลลงในไฟล์เดิมที่เปิดค้างไว้ copytruncate จะทำการคัดลอกไฟล์บันทึกแล้วจึงตัดทอน (truncate) ไฟล์ต้นฉบับแทนการย้ายไฟล์ เพื่อให้โปรแกรมยังคงรักษา file handle เดิมไว้ได้ แต่อาจมีข้อมูลบางบรรทัดที่เขียนขึ้นระหว่างการคัดลอกสูญหายไปบ้าง

3การทดสอบ

logrotate -d /etc/logrotate.conf จะทำงานในโหมดดีบั๊กและแสดงผลเฉพาะสิ่งที่อาจเกิดขึ้นเท่านั้น ส่วน -f จะเป็นการบังคับให้หมุนเวียนไฟล์ทันทีแม้จะยังไม่ถึงกำหนดก็ตาม

วิธีการเพิ่มและทดสอบกฎ

  1. สร้างไฟล์ /etc/logrotate.d/myapp พร้อมระบุพาธของไฟล์บันทึกและคำสั่งต่างๆ เช่น weekly, rotate 4, compress, missingok, notifempty
  2. ทดสอบการทำงาน: sudo logrotate -d /etc/logrotate.d/myapp
  3. หากผลลัพธ์ที่แสดงถูกต้อง ให้บังคับหมุนเวียนไฟล์หนึ่งครั้ง: sudo logrotate -f /etc/logrotate.d/myapp
  4. ตรวจสอบผลลัพธ์: ใช้คำสั่ง ls -l ในไดเรกทอรีของไฟล์บันทึก

ข้อควรระวัง

  • รูปแบบพาธที่ผิดพลาดอาจทำให้ไฟล์บันทึกของโปรแกรมอื่นถูกหมุนเวียนหรือถูกลบได้
  • ไฟล์บันทึกที่จัดการโดย systemd journal จะถูกจำกัดค่าไว้ใน journald.conf ไม่ใช่โดย logrotate

แหล่งอ้างอิง

  1. logrotate(8) man7.org
  2. logrotate(8) (Debian) manpages.debian.org

ตรวจสอบล่าสุด: