Logrotate çalışmıyor


18

Apache dosyalarımı haftalık olarak döndürmek için VPS'im üzerinde çalışmak için logrotate almaya çalışıyorum. Şu anda apache2 yapılandırma dosyasının içeriği şu şekildedir.

"/var/www/user/site.com/logs/*.log"   {
        weekly
        missingok
        rotate 8
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript
}

Şimdi iki hafta kaldım ve anlayabildiğim kadarıyla hiçbir şey değişmedi. Komut satırından simüle ettiğimde aşağıdaki çıktıyı alıyorum.

user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log" 

Handling 1 logs

rotating pattern: "/var/www/user/site.com/logs/*.log"     weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
  log does not need rotating
considering log /var/www/user/site.com/logs/error.log
  log does not need rotating
not running postrotate script, since no logs were rotated

Iv'e neyin yanlış yapılandırıldığına dair bir fikrin var mı?

Durum dosyam da boş :(

user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2

Güncelleme

Durum dosyasını sildim ve logrotate zorla çalıştırdım ve şimdi günlükler döndürülmüş gibi görünüyor ve durum dosyası daha umut verici görünüyor!

sudo rm /var/lib/logrotate/status

sudo /usr/sbin/logrotate -f /etc/logrotate.conf

Yanıtlar:


17

Bence weeklylogrotate, döndürmek için access.log dosyanız için en az bir haftalık giriş görmek istiyor.

Dolayısıyla sorun, rotasyonu tetiklemek için durum girişini saklamadığınızdır.


Aşağıda, logrotate'in bir günlük dosyasını döndürmeye nasıl karar verdiğine dair basit bir örnek verilmiştir
(bunlar fedora yolları, Ubuntu, Centos vb. Farklı olabilir)

( http://localhostAccess_log'da bazı girişler olması için birkaç istekte bulundum , aksi takdirde logrotate asla dönmez ...)

Bu yüzden apache için logrotate'imi haftalık olarak ayarladım;

/var/log/httpd/*log {
        weekly
...
}

ve aslen /var/lib/logrotate.statusdosyada giriş yok

# grep access_log /var/lib/logrotate.status
<- nothing

Yani logrotate access_logdosyayı döndürmez ;

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 ...
considering log /var/log/httpd/access_log
  log does not need rotating

Ancak logrotate manuel olarak çalıştırırsanız;

#  /usr/sbin/logrotate   /etc/logrotate.d/httpd 

artık httpd access_log için durum dosyasında bir girdi var;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-5-11

Ancak apache hala kaydı döndürmeyecektir, çünkü giriş sadece 0 günlüktür (2012-5-11);

  #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 considering log /var/log/httpd/access_log
   log does not need rotating

Ancak durum dosyasını vi ile düzenlerseniz, vi /var/lib/logrotate.statustarihi bir haftadan daha uzun bir süreye ayarlamak için böyle bir şey ...;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-4-11    <---    more than a week ago..

Ardından logrotate, durum dosyasındaki tarihin 2012-4-11bugünden bir haftadan daha önce olması nedeniyle dosyayı doğru şekilde döndürüyor2012-5-11

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd
 considering log /var/log/httpd/access_log
 log needs rotating           <---    logrotate rotates the file.

( -dbir kuru çalışmaya neden olduğunu unutmayın , bu nedenle sadece teftiş için yararlıdır, aslında -ddurum girişleri yapmadan veya dosyaları döndürmeden vb.


1
Günlük dosyaları bir haftadan eski girişler var mıydı - Şimdi çalışıyor gibi görünüyor, ancak sanırım bundan bir hafta sonra bulacağım ...
Malachi

2
Üzgünüm, cevapta daha açık olabilirdim, ama haftalık bir rotasyon için /var/lib/logrotate.statusen az bir haftalık bir tarihe sahip dosyaya bir girişe ihtiyacı olduğunu düşünüyorum . Cevabı bir örnekle güncelledim ...
Tom H

Böyle açık bir açıklama için teşekkürler - Ben şeylerin tarih tarafı tamamen anlıyorum, ben manuel olarak komutu çağırmadıkça sadece dönmüyorlar ... Sanki CRON günlük döndürme çağırmıyor gibi?
Malachi

Linux yönetimi için nispeten yeniyim ... /etc/cron.daily/logrotate/ içinde: #! / Bin / sh test -x / usr / sbin / logrotate || çıkış 0
Malachi

7
log does not need rotating

Bunun nedeni, günlük dosyalarınızın boş olması olabilir.
Bu durum, apache hala apache yeniden başlatılmadan yeniden adlandırılan önceki bir günlük dosyasına yazdığı için oluşabilir. Böylece access.log access.log.1 oldu ve apache yazıyor.

Veya günlüğün oluşturulma zamanı ile ilgili bir sorununuz var:

ls -al --time=ctime /var/www/user/site.com/logs/

notifemptyDöndürülmeyen 0 bayt günlükleriyle başa çıkmak için satırı yorumlayabilirsiniz. Daha sonra touchher testten önce yeni bir günlük dosyası isteyeceksiniz, böylece logrotate'in döndürecek bir şeyi olacaktır.
Banjer

6

Benzer sorunla karşılaştım, ancak bu cevapların hiçbiri bana yardımcı olmadı. Günlük dosyam çok büyük ve eskiydi, yapılandırmam% 100 tamam ve geçerliydi, durum dosyasını kaldırmak yardımcı olmadı.

Sorunun yinelenen logrotate girişlerinde olduğu ortaya çıktı . Logrotate komutunu yapılandırma dosyamda manuel olarak çalıştırdığımda:

logrotate -df /etc/logrotate.d/my_service_name

herhangi bir hata göstermedi, sadece dedi:

log does not need rotating

Hala neden olduğunu bilmiyorum. Ama böyle bir tam logrotate komutu çalıştırdığınızda:

logrotate -f /etc/logrotate.conf

Aşağıdaki satırı aldım:

error: my_service_name:1 duplicate log entry for /var/log/nginx/my_service_name.access.log

Hizmetimin logrotate yapılandırma dosyasının, nginx erişim günlüklerini ve hizmet günlüklerini döndürmek için girişler içerdiği ortaya çıktı. Ve bu tüm nginx girişleri için bir kurala sahip olan ngnix logrotate config ile çakıştı:

# grep nginx /etc/logrotate.d/*
/etc/logrotate.d/nginx:/var/log/nginx/*.log {

Bu yüzden benim durumumun çözümü oldukça basit: Sadece çakışan nginx günlükleri rotasyon kuralını yapılandırmamdan silmek zorunda kaldım .

Ben logrotate sadece en yeni sürümlerinden kural çakışmaları işleme dosyasını iptal etmeye başladı sanırım. Ben v.3.8.7 ile bu hatayı alıyorum ama aynı çakışan yapılandırma ile v.3.7.8 altında aynı hatayı yazıyor ama iyi döner. Logrotate changelog'da bunun herhangi bir kaydını bulamadım.


en son sürümler konusunda haklısınız. Ayrıca yinelenen girişler vardı; ancak logrotate manüel çalıştırılırken; gayet iyi çalıştı. Gece dönüş değeri 0; ama düzgün çalışmadı ...
Chris Maes

2

Çalıştırmayı deneyin sudo logrotate -f --verbose /etc/logrotate.d/apache2 Konsolda yazılanları görün ve yanlış olan her şeyi düzeltin.


0

Bir sistem güncellemesinin ardından artık posta günlüklerini döndürmeyen bir Debian 7 makinem vardı. Posta dışındaki tüm günlükler doğru şekilde döndürüldü. Posta günlüklerinin birkaç gigabayt büyüdüğünü keşfettim. Her zaman Webmin üzerinden günlük rotasyonunu yönettim. Sonra, çalışan logrotate -d /etc/logrotate.confaşağıdaki mesajı gördüm:

Ignoring rsyslog.dpkg-old, because of .dpkg-old ending

Posta döndürme girişlerimin listelendiği ortaya çıktı /etc/logrotate.d/rsyslog.dpkg-old, ki bu yoksayıldı! Dosyayı yeniden adlandırmak günlük dosyasının döndürülmesini düzeltti :-)

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.