Logrotate: “log döndürmek gerekmez” neden?


57

Aşağıdaki yeni logrotate yapılandırmasına sahibim:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Koşarken logrotate -d nexus, aşağıdakileri alıyorum:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

/ Var / log / nexus / klasörüm aşağıdakileri içerir:

nexus.log
oldlogs.tar.gz

LogRotate nexus.log dosyasını neden döndürmüyor? Beklediğim şey nexus.log dosyasının kesilmiş olması ve nexus.log-201106241000 gibi yeni bir dosyanın yaratılmış olmasıydı.


Ayrıca, -d seçeneğini kullandığınızda, GÜNLÜK DÖNDÜRMEMEK GEREKİR. Bu, bir oyun planı gibi, seçeneği olmadan çalışmayı ne yaptığını gösterir. Döndüklerini görebildiğimi düşündüğümde bazı başım ağrıyordu ve sonra hala oradalardı.
Maxwell Flanders

Yanıtlar:


64

Büyük olasılıkla, günlük dosyası bir günden eski değil ve / veya son gün içinde döndürülmüş ve logrotate geçmişi hatırlıyor.

Eğer eklerseniz -f, gerçekten yapmak istiyorsanız bir rotasyona zorlarsınız (% 100 ile nasıl etkileşimde olduğundan emin olmasanız da -d).

Geçmişe bakabilirsiniz, konum dağılımınıza bağlıdır, ancak olabilir /var/lib/logrotate/status. Bu dosya günlüklerin en son ne zaman döndürüldüğünü gösterir.


4
FreeBSD'de /var/run/logrotate.status
kaleissin

Ayrıca durum dosyası konumu için -s argümanının olası kullanımını kontrol edin
JGurtz

2
-d+ -flogrotate raporunu tüm dosyalar için, hatta eşleşmeyenler için bile "döndürme ihtiyacı" yapar
Fluffy

Buna eklemek için, durum dosyasındaki tarihi rotasyon politikasından daha eski olacak şekilde düzenlemek, logrotatetekrar çalıştığında günlüğü döndürmesi gerektiğine ikna etmek için yeterlidir .
Centimane

CentOS'ta, logrotate çalışmasını sağlamak için /var/lib/logrotate.status değiştirdim. EightBitTony tarafından belirtildiği gibi günlük logrotate geçmişi hatırlayacaktır. Dosya geçmişte tarihî bir tarihe sahip değilse, logrotate dosyayı döndürmez.
Mark

58

Yeni bir log yapılandırmasıyla logrotate'i ilk çalıştırdığınızda, son log dönüşünün ne zaman gerçekleştiğini bilmiyor, bu yüzden /var/lib/logrotate/statusbugün çalıştırıldığı etki için bir durum satırı yazıyor .

Daha sonra ertesi gün çalıştırıldığında, kütüğün bir gün eski olduğunu ve beklendiği gibi döndürdüğünü görür. Beklemek istemiyorsanız, logrotate'in durum dosyasını düzenleyin ve günlüğünüzün durum tarihini önceki güne kadar kaz.

Logrotate'i manuel olarak çalıştırdığınızda, beklendiği gibi çalışacaktır.


5

Bazen logrotate'i manuel olarak çalıştırsanız bile, aynı gün yaparsanız ve dateextvarsayılan değerin senconds içermediği yerlerde bu işe yaramaz -%Y%m%d. Logrotate'in durum dosyasını değiştirseniz veya size direktif kullanırken (örn. size 200M) Bile . En azından CentOS 6'da, logrotate zaten mevcut olduğundan log dosyanızı döndüremez.

Bunu çözmek için, dateformatyerine dateext: gibi bir değer kullanmanız gerekir %Y%m%d%s.

Daha man logrotatefazla bilgi için bkz .


1

Çalıştırarak dikkat edin

logrotate -vdf /etc/logrotate.conf

Sadece benzetim yapılmış olmasına rağmen olay kaydedilecek /var/lib/logrotate.status ve sonraki logrotate çalıştırmaları söz konusu ile cevaplanacaktır.

log does not need rotating

1
Bunu Ubuntu'da (16.04 ve 17.04) çoğaltamam. "/Var/lib/logrotate.status" kullanılıyorsa, başka bir dağıtım kullanmanız gerekir. Ubuntu, "/ var / lib / logrotate / status" 'a giriş yapar.
Philipp Claßen

2
@Philipp Claßen: /var/lib/logrotate.statusBir docker konteyneri içinde Alpine linux 3.5 üzerindeki Logrotate 3.10 yapılandırmasında hata ayıklama yaparken bu durumun (yerleştirilmiş durum dosyası ) gözlemlendiği doğru. Fakat soru tanımında Ubuntu bayrağı yoktur, değil mi?
helvete

1
Evet, tamam. Sadece bahsedeceğim çünkü Ubuntu çok popüler. Çoğu kimsenin bu soruyu okuduğunu düşünüyorum, çünkü bugün sık sık Ubuntu ile çalışan sunucularını düzeltmek istiyorlar.
Philipp Claßen

1
Tamam, doğru. Tamamlanmak için Centos 7 /var/lib/logrotate/logrotate.status
distro'daki
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.