Selamlar,
Lab ve küçük VPS'lerde loglar hızla şişiyor. journald'yi sınırlamak bir çözüm; klasik metin loglar için de Bash ile basit bakım şart. Bu konuda kendi cron'umda kullandığım güvenli kalıpları yazıyorum.
Konuda Anlatılacaklar
- find ile eski log bulma
- xargs tuzakları (boşluklu dosya adları)
- Sıkıştırma ve silme
- logrotate'a bırakmak daha doğru mu?
- Örnek cron
1) find Temelleri
# Son 1 günde değişen .log dosyaları
find /var/log -type f -name '*.log' -mtime -1
# 14 günden eski, boyutu 10M üstü
find /var/log -type f -name '*.log' -mtime +14 -size +10M -ls[-mtime +14] "14 tam günden eski", [-size +10M] "10 mebibayttan büyük" demek.
2) xargs ve Güvenli Silme
# YANLIŞ: boşluklu isimde kırılır
find /var/log -name '*.log' -mtime +30 | xargs rm
# DOĞRU: null ayracı
find /var/log -type f -name '*.log' -mtime +30 -print0 | xargs -0 rm -v
# Daha da iyisi: find -delete (aynı süreçte)
find /var/log -type f -name '*.log' -mtime +30 -deleteSilmeden önce [-ls] ile listeleyin. Üretimde körlemesine rm kullanmayın.
3) Sıkıştırma
find /var/log -type f -name '*.log' -mtime +2 ! -name '*.gz' -print0 | xargs -0 gzip -9gzip orijinali siler; .gz uzantılı dosyayı tekrar sıkıştırmamak için [! -name '*.gz'] şart.
4) logrotate Tercih Edin
Debian/Ubuntu'da /etc/logrotate.d/ altında servis bazlı kurallar vardır. Kendi uygulamanız için:
/var/log/benimapp/*.log {
weekly
rotate 8
compress
delaycompress
missingok
notifempty
copytruncate
}Bash one-liner'lar acil temizlik içindir; uzun vadede logrotate + journald SystemMaxUse.
5) Örnek Cron
# Her pazar 04:30 - 30 günden eski uygulama loglarını sıkıştır
30 4 * * 0 find /var/log/benimapp -type f -name '*.log' -mtime +30 -print0 | xargs -0 gzip -9Kaynaklar
Alıntı:Yalnızca kendi sistemlerinizde kullanın.
Kapak: özgün TurkTeam görseli.