ปัญหา
ระบบ Linux โดยเฉพาะเซิร์ฟเวอร์ที่ทำงานต่อเนื่องเป็นเวลานาน มักมีไฟล์ Log ใน /var/log เพิ่มขึ้นเรื่อย ๆ หากไม่มีการจัดการ อาจทำให้พื้นที่ดิสก์เต็มและส่งผลให้ระบบทำงานผิดปกติ หรือไม่สามารถเข้า GUI ได้
ตัวอย่างไฟล์ที่มักมีขนาดใหญ่ ได้แก่
/var/log/messages/var/log/secure/var/log/cron/var/log/httpd/*/var/log/php-fpm/*
วิธีที่แนะนำ: ใช้ Logrotate
ระบบ CentOS/RHEL มีโปรแกรม logrotate สำหรับจัดการ Log อัตโนมัติอยู่แล้ว ไม่ควรใช้ cron ลบไฟล์เองโดยตรง เพราะอาจกระทบการทำงานของบริการต่าง ๆ
ตรวจสอบไฟล์ตั้งค่า
สำหรับ Log ของระบบ (messages, secure, cron) จะใช้ไฟล์
cat /etc/logrotate.d/rsyslog
ตั้งค่าให้เก็บ Log ไว้ 30 วัน
แก้ไขไฟล์
vi /etc/logrotate.d/rsyslog
กำหนดค่าเป็นดังนี้
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
daily
rotate 30
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
/usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
endscript
}
ความหมายของแต่ละคำสั่ง
| คำสั่ง | ความหมาย |
|---|---|
daily | หมุน Log ทุกวัน |
rotate 30 | เก็บย้อนหลัง 30 ชุด (ประมาณ 30 วัน) |
compress | บีบอัด Log เก่าเป็น .gz |
delaycompress | บีบอัดหลังจากหมุนครั้งถัดไป |
missingok | ไม่มีไฟล์ก็ไม่แจ้ง Error |
notifempty | ไม่หมุนไฟล์ที่ว่าง |
postrotate | แจ้งให้ rsyslog เปิดไฟล์ Log ใหม่ |
ทดสอบการตั้งค่า
ตรวจสอบว่าไฟล์ตั้งค่าถูกต้องหรือไม่
logrotate -d /etc/logrotate.conf
หากไม่มี Error สามารถบังคับให้หมุน Log ได้ด้วยคำสั่ง
logrotate -f /etc/logrotate.conf
ตรวจสอบผลลัพธ์
ดูไฟล์ Log ที่มีอยู่
ls -lh /var/log/messages*
ตัวอย่าง
-rw------- 1 root root 2.0M Jul 3 00:19 /var/log/messages
-rw------- 1 root root 29M Jul 2 23:50 /var/log/messages-20260703.gz
ลบไฟล์ที่เก่ากว่า 30 วันทันที (ถ้าต้องการ)
หากมีไฟล์เก่าที่ต้องการลบทันที สามารถใช้คำสั่ง
find /var/log -name "messages*" -mtime +30 -delete
หรือดูรายการก่อนลบ
find /var/log -name "messages*" -mtime +30 -ls
ตรวจสอบพื้นที่ดิสก์หลังทำความสะอาด
df -h
หรือ
df -h /var
สรุป
การตั้งค่า
daily
rotate 30
compress
จะทำให้ระบบ
- หมุน Log ทุกวัน
- เก็บ Log ย้อนหลังประมาณ 30 วัน
- บีบอัดไฟล์เก่าอัตโนมัติ
- ลบไฟล์ที่เก่ากว่า 1 เดือนโดยอัตโนมัติ
- ช่วยป้องกันปัญหาพื้นที่ดิสก์เต็มในอนาคต
