Sunucu Loglarını Otomatik Temizleyen ve Arşivleyen Bash Scripti
Linux Sistemlerde Disk Dolma Sorununu Cronjob ve Bash İle Çözmek
Sistem yöneticilerinin en sık karşılaştığı krizlerden biri gece yarısı "/ (root) partition is full" uyarısıyla uyanmaktır. Uygulamaların yazdığı (özellikle hata anlarında büyüyen) devasa log dosyaları veya ISP altyapılarında biriken Radius detay kayıtları diski doldurduğunda veritabanı çöker ve sistem kilitlenir.
Logrotate vs Özel Bash Scriptleri
Linux ile gelen logrotate aracı aslında bu işi standart servisler (Nginx, Syslog) için çok iyi yapar. Ancak spesifik uygulamalarınız, Docker konteyner çıktılarınız veya kendi yazılımlarınızın logları için esnek bir bash scripti yazıp bunu Cronjob ile zamanlamak hayat kurtarır.
Otomasyon Scripti Mantığı
Aşağıdaki temel adımlar bir bash script dosyasına (log_cleanup.sh) yazılarak her gece 03:00'da çalıştırılabilir:
Bulma (Find): `find /var/log/myapp -type f -name "*.log" -mtime +7` komutuyla 7 günden daha eski log dosyaları tespit edilir.
Sıkıştırma (Archive): Bulunan GB'larca büyüklükteki metin dosyaları `tar -czvf` ile ziplenerek disk alanından %90 tasarruf sağlanır.
Uzak Yedekleme (Off-Site): Sıkıştırılan dosyalar güvenlik amacıyla `rsync` veya `s3cmd` kullanılarak uzak bir FTP sunucusuna veya AWS S3 bucket'ına aktarılır.
Silme: Aktarım başarılı olduktan sonra (exit code kontrolü yapılarak) sunucu üzerindeki asıl log dosyaları `rm` komutuyla silinerek diski ferahlatır.
Hazırladığınız sistem betiklerinde (Scripting) Bash yerine Python kullanmayı tercih ettiğiniz spesifik durumlar (örneğin JSON parse etmek gerektiğinde) nelerdir?
Log silme scriptine tar komutu ile arşive alıp AWS S3'e veya FTP'ye yedekleme adımı da eklenebilir. Böylece geçmişe dönük veriler kaybolmaz.
Cevap yazmak için giriş yapmalısınız.
Giriş Yap