# logrotate

> การทำงานของ logrotate วิธีการตั้งค่าใน /etc/logrotate.conf และ /etc/logrotate.d รวมถึงวิธีทดสอบกฎอย่างปลอดภัย

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

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

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

## copytruncate

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

## การทดสอบ

'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

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

- [logrotate(8)](https://man7.org/linux/man-pages/man8/logrotate.8.html)
- [logrotate(8) (Debian)](https://manpages.debian.org/bookworm/logrotate/logrotate.8.en.html)

อัปเดตล่าสุด: 2026-10-08
URL: https://raincleaner.eu/th/wiki/linux/logrotate
