Logrotate olmadan günlük dosyası boyutunu sabit tutun


13

Günlük dosyasının dosya boyutunu yeni bir boş dosya ile döndürmeden ve eski dosyayı silmeden (veya arşivlemeden) sabit tutmanın herhangi bir yolu var mı? Örneğin, günlük dosyasının maksimum boyutunu 1 MB olarak ayarlarsam, dosya boyutu bu sınırın üzerine çıktıktan sonra otomatik olarak kenetlenir, metin 'kuyruğa' eklenir ve dosya boyutunu 1 MB tutmak için metnin en eski kısmı dışarı çıkar .


logrotate kullanın, sonrarm -f *.tar.gz.*
Marco Ceppi

1
Günlüğü döndürmek veya logrotate kullanmak istememenizin özel bir nedeni var mı? Tam olarak ne olmak istiyorsun? Eski günlüğü 1M'de arşivle ve yeni bir günlük başlat? Sorunuzun başlangıcı sonla pek uyumlu değil.
David Thornley

Ne gelmez dışarı poped ortalama?
tshepang

Yanıtlar:


4

Bunu yapmak için küçük bir bash betiği yazabilirsiniz. Sadece dosyayı kullanarak belirli bir bayt sayısına kuyruk tail -cve üzerine yazmak.

from man tail:

-c, --bytes=N
              output the last N bytes; alternatively, use +N to  output  bytes
              starting with the Nth of each file

   If  the  first  character of N (the number of bytes or lines) is a `+',
   print beginning with the Nth item from the start of each  file,  other‐
   wise, print the last N items in the file.  N may have a multiplier suf‐
   fix:  b  512,  kB  1000,  K  1024,  MB  1000*1000,  M   1024*1024,   GB
   1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

3
"Dosyanın üzerine yazdığınızda" günlük kaydının yeni dosyada otomatik olarak devam etmeyeceğinden eminim.
Stephen Jazdzewski

0

Tek çözümünüz kendi kullanıcı alanı dosya sisteminizi yazmak veya mevcut bir sisteme katkıda bulunmak olabilir. Kullanıcı alanındaki Dosya Sistemi bölümündeki kısmi listeye bakın

Katkıda bulunma becerileriniz yoksa, sizin için eklemek üzere bir proje tanıtımı veya $$$ veya her ikisini birden sunun.

Keşke bunu yapmak için zamanım olsaydı, hep böyle bir şey istedim.


0

Sıfır bayt boyutlu bir dosya gibi bir FIFO kullanarak benzer bir şey yapabilirsiniz.

Ancak, bu dosyadan hiçbir şey OKUYORSA, syslog işleminin engellenebileceğini ve günlük dosyalarınızın TÜMÜNE yazmayı durdurabileceğini unutmayın. Bu davranışın yeni Ubuntu / CentOS sürümleriyle değiştirilip değiştirilmediğinden emin değilim.

Burada bir örnek

Başka bir örnek için böyle bir şey deneyin.

FIFO'nuzu yapın:

sudo mkfifo /var/log/everything.fifo

Ve bunu (r) syslog.conf dosyasına ekleyin, sonra syslog'u yeniden başlatın:

*.*     |/var/log/everything.fifo

Ardından FIFO'yu tek bir pencereden görüntüleyin:

cat /var/log/everything.fifo

Ve başka bir pencerede, syslog'a bazı şeyler gönderin:

logger Test1
logger Test2
logger Test3

catYukarıdaki çıktıda "Test *" satırlarını görmelisiniz .

Bu özellik, özellikle verileri daha uzun süre saklamak istemiyorsanız hata ayıklama için harika olabilir. Örneğin, yalnızca güvenlik duvarı spam dışındaki her şeyi görmek istiyorsanız, şöyle bir şey yapabilirsiniz:

grep -vi "kernel: .* on wan" /var/log/everything.fifo

0

İşte ikinci cevabım. Bu oldukça acayip.

Tekrar tekrar yürütmek için watch (1) işlevini kullanın ( tail --bytes=1024bu yanıt için @jjclarkson sayesinde günlük dosyasının son 1024 baytı).

watch --no-title tail --bytes=1024 /var/log/messages >/tmp/messages.watch

Ve sonra dosyayı şununla görüntüleyin:

less --raw-control-chars /tmp/messages.watch

Ve watchwhile döngüsü arasındaki fark , watch/tmp/messages.watch öğesinin yalnızca / var / log / messages öğesinde değişiklik olması durumunda güncelleştirilmesidir.

while true; do
    tail --bytes=1024 /var/log/messages > /tmp/messages.watch
    sleep 1
done

Ve sanırım testwhile döngüsüne bir koyabilirsiniz , böylece kuyruk sadece / var / log / messages güncellendiğinde yürütülür, ancak şimdi anlamayacağım.


0
 * budama - içinde açıklanan dosyaların bir listesinin üst kısımlarını kırpır
 * dosya / etc / default / erik. Periyodik olarak çalışacak şekilde tasarlanmıştır
 * cron'dan fikir günlüğü otomatik olarak kısaltmaktır
 * sonsuza kadar büyüyen dosyaları. Bu dosya aşağıdakilerin listesini içerir
 * dosya (tam yol adı) ve blok sayısı
 * korunmalıdır. Akıl sağlığını korumak için, erik irade
 * sonraki satırsonu sonra dosyayı klip. Dosya
 * / etc / default / erik şöyle görünmelidir:
 *
 * / usr / adm / aculog 10
 * /usr/adm/leo.log 5
 * / usr / adm / mesajlar 200
 * / usr / adm / sup_log 5
 *
 * Erik için infoswx üzerindeki crontab girişi şuna benzer:
 *
 * 0 5 * * * / etc / kuru erik> /usr/adm/prune.log 2> & 1
 *
 * Şununla derleyin: cc -O -o prune prune.c
 *
 * Aşağıdaki tanımlar zevkinize göre ayarlanabilir
 * ve sistem blok boyutunuz.
 *
 * Ray Davis infoswx! Arılar 09/25/85

https://groups.google.com/group/mod.sources/browse_thread/thread/b2136b3ab7e924e/f785b37c218bb576?hl=en&ie=UTF-8&q=prune+log+file&pli=1

HUP sinyali gönderilirse birçok (en çok? Hepsi?) Arka plan programı günlük dosyalarını yeniden açar (örneğin, kuru erik çalıştıran aynı cron işi tarafından)


0

Orijinal posterin 8 yıl sonra bir çözüm bulduğundan eminim. İşte başkaları için bu konuyu okuyabilecek başka bir tane ...

curtail, bir programın çıktısının boyutunu sınırlar ve aşağıdaki komutla son 200MB çıktıyı korur:

çalışma_programı | curtail -s 200M Instagram Hesabındaki Resim ve Videoları myprogram.log

https://github.com/Comcast/Infinite-File-Curtailer

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.