kabuk betiğinde logrotate nasıl uygulanır


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

Günlük dosyası boyutunu kontrol etmek için logrotate uygulamak istiyorum, bu yüzden durum yukarıdaki gibi ise logrotate nasıl uygulanır?

Yanıtlar:


11
#!/bin/bash 
touch /script_logs/test.log
MaxFileSize=2048
while true
do
     sh test.sh >> /script_logs/test.log
#Get size in bytes** 
    file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
    if [ $file_size -gt $MaxFileSize ];then   
        timestamp=`date +%s`
        mv /script_logs/test.log /script_logs/test.log.$timestamp
        touch /script_logs/test.log
    fi

done

Bir soruna neden olabileceği için "&" işaretini kaldırdım.


@Veerendra sonsuz bir döngü çalıştırırken günlükleri döngü içinde yuvarlama mantığını koymamız gerekiyor ..
meraklı

@Veerendra biz önceki yazı bir hata vardı .. "mv" yeni bir dosya oluşturmaz ama senaryoyu ihtiyacına göre değiştirebilirsiniz.
meraklı

Yani, cpve yerine mv, günlük dosyasını kaldırabilir miyim, o zaman aynı ada sahip yeni günlük dosyası olacak mı? )
Veerendra Kakumanu

>>Günlük dosyasına eklemek için kullanmalısınız , dosyanın >üzerine tekrar tekrar yazacaktır.
alcik

Eğer kullanırsam >, alıyorum tail: test.log: file truncated Hello World!.... Eğer kullanırsam >>, doğru günlük mesajı alıyorum, ancak dosya boyutu artıyor. Durumu kontrol eden durum yok ... ;-(
Veerendra Kakumanu

24

kullanmaya ne dersin savelog?

Debian ve RH ve neredeyse bildiğim diğer linux dağıtımlarında mevcuttur. Bu bir / bin / sh kabuk betiğidir, bu yüzden başka herhangi bir unix üzerinde de çalışmalıdır.

örneğin test.logçalıştırmak için herhangi bir şey yazmadan önce savelog -n -c 7 test.log. Bu, test.log dosyasının en son 7 boş olmayan sürümünü saklar. Varsayılan olarak, döndürülmüş günlükleri sıkıştırır (ancak ile devre dışı bırakılabilir -l).

Gerekirse, boyutunu test.logve yalnızca savelogbelirli bir boyutun üzerindeyse kontrol edebilirsiniz .


AWS Linux'ta hangi paketin bulunduğuna dair bir fikir (CentOS'a yakın, inanıyorum)? Varsayılan kurulumda savelog yoktur. Ya varsayılan depoları kullanarak yum bulamıyorum
jhonkola

savelog RHEL 5'te bulunamadı. Hangi repoda olması gerektiğini biliyor musunuz?
Felipe Alvarez

centos veya rhel5 paketleme hakkında hiçbir fikrim yok, ancak /usr/bin/savelogkabuk betiğini sources.debian.net/src/debianutils/4.7
cas

2
Ben bulamadım savelogben sadece ettik, böylece benim RHEL / CentOS 5/6 kutularından herhangi indirmiştim ad hoc, ve benim ihtiyaçları için sadece iyi çalışıyor gibi görünüyor.
Dale Anderson

Bunun bir dezavantajı savelog, dosyayı yeniden adlandırması, ancak bitirmeden önce eskilerini gzip etmesinin uzun zaman almasıdır. Bu arada .0 günlüğü zaten sonraki gün girişleri alır. İdeal olarak, log rotasyonu ile logun yeniden açılması sürecini bildirme arasındaki süre minimum olmalıdır. savelogBu nedenle sıkıştırma özelliğini devre dışı bırakıyorum.
rustyx

2

Bu hafta sonu bir logrotee yazdım . @ JdeBP'nin büyük cevabınımultilog okuduğumda muhtemelen yapmazdım .

Ben hafif ve onun gibi çıktı parçaları bzip2 mümkün odaklanmış:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

Yine de yapılacak ve test edilecek çok şey var.


0

Henüz kabul edilen cevaba yorum ekleyemediğim için, bir bayrağının olmadığı bir BusyBox ipucu :du-b

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.