วิธีลบไฟล์ Log ใน /var/log ที่เก่ากว่า 1 เดือนอัตโนมัติบน CentOS/RHEL


ปัญหา

ระบบ 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 เดือนโดยอัตโนมัติ
  • ช่วยป้องกันปัญหาพื้นที่ดิสก์เต็มในอนาคต
,