logrotate
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 จะเป็นการบังคับให้หมุนเวียนไฟล์ทันทีแม้จะยังไม่ถึงกำหนดก็ตาม
วิธีการเพิ่มและทดสอบกฎ
- สร้างไฟล์
/etc/logrotate.d/myappพร้อมระบุพาธของไฟล์บันทึกและคำสั่งต่างๆ เช่น weekly, rotate 4, compress, missingok, notifempty - ทดสอบการทำงาน:
sudo logrotate -d /etc/logrotate.d/myapp - หากผลลัพธ์ที่แสดงถูกต้อง ให้บังคับหมุนเวียนไฟล์หนึ่งครั้ง:
sudo logrotate -f /etc/logrotate.d/myapp - ตรวจสอบผลลัพธ์: ใช้คำสั่ง ls -l ในไดเรกทอรีของไฟล์บันทึก
ข้อควรระวัง
- รูปแบบพาธที่ผิดพลาดอาจทำให้ไฟล์บันทึกของโปรแกรมอื่นถูกหมุนเวียนหรือถูกลบได้
- ไฟล์บันทึกที่จัดการโดย systemd journal จะถูกจำกัดค่าไว้ใน journald.conf ไม่ใช่โดย logrotate
บทความที่เกี่ยวข้อง
- journalctl และ systemd journalวิธีอ่านบันทึกด้วย journalctl ตรวจสอบพื้นที่ที่ journal ใช้งาน และลดขนาดอย่างปลอดภัยด้วยตัวเลือก --vacuum
- การใช้งานดิสก์ด้วย du และ ncduวิธีค้นหาว่าสิ่งใดทำให้ดิสก์ Linux เต็มด้วย du และ ncdu แบบโต้ตอบ พร้อมตัวเลือกที่จำกัดการทำงานอยู่ภายในระบบไฟล์เดียว
- cron และ crontabวิธีที่ cron ใช้รันงานตามกำหนดการ, ฟิลด์เวลาทั้งห้าของ crontab, ตำแหน่งที่เก็บไฟล์ cron ของระบบ และการเปรียบเทียบกับ systemd timers
แหล่งอ้างอิง
- logrotate(8) man7.org
- logrotate(8) (Debian) manpages.debian.org
ตรวจสอบล่าสุด: