Günlükleri döndürürken apache yeniden yüklenmesini nasıl önleyebilirim?


25

Apache erişimini, hatalarını ve yeniden yazma günlüklerini döndürmek için logrotate kullanıyorum. Config dosyam şuna benziyor:

/apache/*log {
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
    lastaction
     /bin/apache reload
    endscript
}

Benim sorunum, ne zaman bir rotasyon meydana gelirse, Apache'nin sadece döndürülmüş günlük dosyasına yazmadığı için Apache'nin yeniden yüklenmesi gerekiyor. Logrotate her rotasyon yaptığında Apache'nin yeniden yüklenmesini önlemenin bir yolu var mı?

Yanıtlar:


42

Apache'nin yeniden yüklenmesi gerekmesinin nedeni, bir dosyayı açtıktan sonra, kendisine bir dosya ayağı çekmesi ve o dosyaya yazmaya devam etmesidir. Dosyayı taşıdığınızda, görmüyor, sadece aynı tutamağa yazıyor. Yeniden yüklediğinizde, dosyayı tekrar açar ve yeni bir tanıtıcı alır.

Yeniden yüklemeyi önlemek için, dosyayı taşımak yerine, dosyayı kopyalayabilir ve eski dosyayı boşaltabilirsiniz. Bu şekilde apache aynı dosya yoluna yazmaya devam edebilir. Bunu, logrotate config dosyasına "copytruncate" seçeneğini ekleyerek şöyle yapabilirsiniz:

/apache/*log {
    copytruncate
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
}

Cevabınız için teşekkürler. Yani ben lastaction echo "" | /apache/*log endscriptdosya askısı eklediğimde "kayıp" değil sanırım ?
arp

3
Üzgünüm, "kopya" yerine "copytruncate" demeliydim. Öyleyse, sen ölüm olayına hiç ihtiyacın yok. Kafein akışımda çok fazla kan bulunduğunu suçluyorum :-)
Jenny D

Bir cazibe gibi çalışır :)
Arp

4
@harp dikkatli olun, logrotatedoktor diyor ki: "Dosyayı kopyalamak ve kesmek arasında çok küçük bir zaman dilimi olduğunu unutmayın, bu nedenle bazı günlük verileri kaybolabilir."
Totor

Bazı verilerin kaybolma olasılığı dışında, kullanmanın bilinen herhangi bir olumsuz tarafı var copytruncatemı?
Leo Galleguillos

5

Http://cronolog.org/ adresini kullanmanızı tavsiye ediyorum.

Bu nasıl kullanıyorum:

CustomLog     "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined

1
Herhangi bir harici programa bağlantı yapmak, web sunucusuna çok fazla trafik olması durumunda sorun olabilir. Ancak, düzgünce filehandle sorununu önlüyor.
Jenny D

İyi bir alternatif gibi görünüyor. Cronolog anında sıkıştırıyor mu?
arp

Apache2-utils paketinde benzer bir uygulama "rotatelogs" var. Farklı apache sanal sunucularından aynı günlük dosyasına "aktarmamaya" dikkat edin - birbirlerine çarpacaklar.
Arie Skliarouk
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.