logrotate günlükleri döndürmüyor


24

Bu logrotate config var ve Ubuntu 10.04 ile çalışıyorum.

/var/log/mysql/mysql-slow.log {
    daily
    rotate 3
    compress
    notifempty
    missingok
    create 660 mysql adm
    postrotate 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin  ping &>/dev/null
    then
       /usr/bin/mysqladmin  flush-logs
    fi
endscript

}

Bunu /etc/logrotate.d dosyasına dün koydum ve bugün kütük döndürülmedi.

Aşağıda yaptığım şeyler:

  1. Günlüğün gerçekten /var/log/mysql/mysql-slow.log içinde olduğunu doğruladım.
  2. mysqladmin hatları kök olarak çalıştırıldığında iyi çalışır
  3. mysql mysql-slow.log dosyasına yazabilir

Bunu yaptığımda:

$ logrotate -d -f mysql-slow

reading config file mysql-slow
reading config info for /var/log/mysql/mysql-slow.log 

Handling 1 logs

rotating pattern: /var/log/mysql/mysql-slow.log  forced from command line (3 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysql/mysql-slow.log

log needs rotating
rotating log /var/log/mysql/mysql-slow.log, log->rotateCount is 3
dateext suffix '-20120329'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/mysql/mysql-slow.log.3.gz to /var/log/mysql/mysql-slow.log.4.gz     (rotatecount 3, logstart 1, i 3), 
renaming /var/log/mysql/mysql-slow.log.2.gz to /var/log/mysql/mysql-slow.log.3.gz (rotatecount 3, logstart 1, i 2), 
renaming /var/log/mysql/mysql-slow.log.1.gz to /var/log/mysql/mysql-slow.log.2.gz (rotatecount 3, logstart 1, i 1), 
renaming /var/log/mysql/mysql-slow.log.0.gz to /var/log/mysql/mysql-slow.log.1.gz (rotatecount 3, logstart 1, i 0), 
renaming /var/log/mysql/mysql-slow.log to /var/log/mysql/mysql-slow.log.1
creating new /var/log/mysql/mysql-slow.log mode = 0660 uid = 20004 gid = 4
running postrotate script
running script (multiple) with arg /var/log/mysql/mysql-slow.log : " 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
"
compressing log with: /bin/gzip
removing old log /var/log/mysql/mysql-slow.log.4.gz
  1. Logrotate'in başarılı olduğunu gösteren log nerede? Bir sorun olduğunu söyleyecek bir şey olup olmadığını görmek istiyorum.
  2. Logrotate'in işe yaramadığı hakkında bir fikriniz var mı?

Yani elle yapıldığında işe yarıyor mu? Mı crondçalışıyor?
Kyle Smith

evet çalışır, logrotate -f mysql_slow_query demek istiyorsan. Ve crond çalışıyor.
Carmen

Bu günlük dosyasını işlemesi gereken başka bir yapılandırma olmadığından emin misiniz? Belki de mysql-server? Run grep '/var/log/mysql' /etc/logrotate.d/*.
Zoredache

Bu komutu koştum ve sadece benim config / var / log / mysql
Carmen

Günün hangi saatinde günlük cron işleri Ubuntu kurulumunuzda çalışıyor? Bu bilgiyi /etc/crontabdosyada, biten çizgide bulabilirsiniz /etc/cron.daily ). Belki o gün için cron günlük işler zaten çalıştırdıktan sonra logrotate config oluşturdunuz?
ricmarques

Yanıtlar:


47

Günlük logrotate.d girişini ilk kez ayarladığınızda sık karşılaşılan sorunlardan biri, ilk günü döndürmeyecek olmasıdır. Zamana dayalı bir rotasyon kullandığınızda (günlük / haftalık / aylık) logrotate, karalamada son tarihin tarih damgasını gösterir /var/lib/logrotate/status(veya /var/lib/logrotate.statusRHEL sistemlerinde).

Çizilen tarih, logrotate'günlük' rotasyonları karşılaştırmak için kullanacağınız gelecekteki çalışmalardan itibaren referans tarih olur . Varsayılan cron işi her gün çalıştığından, bu genellikle günlük işlerde bir sorundur.

Bu sorunu iki şekilde önleyebilirsiniz;

  1. koşmak sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • Bu, tarihi durum dosyasına kopyalar ve günlükleri döndürür

  2. Düzen /var/lib/logrotate/statusve çizgi elle ekleyin:

    "/var/log/my_special.log" 2013-4-8

    • bugünün veya önceki bir tarihe ayarlanması. Bir sonraki çalıştırma çalışmasına neden olmalıdır.

Bir şampiyon gibi çalışıyor!
Seth

6
Aslında yapar kullanırken döndürme günlükleri -f(benim RH türevi en azından).
bufh

12
-fForce Rotation için, -dDebug için ayrıca hata ayıklama da kuru çalışmayı ifade eder, bu yüzden açıkken hiçbir değişiklik yapılmaz -d.
ThorSummoner

1
-dkuru çalışma ima zor bir tanesidir. Hiçbir değişiklik yapılmadı ve bu gerçeği anlayana kadar kafamı tırmalamamı sağladı.
Artem Russakovskii

5

Aşağıdaki Slicehost makalesine göre:

Ubuntu'daki logrotate'i anlama - 2. bölüm
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... /var/lib/logrotate/status" her bir günlük dosyasını en son ne zaman döndürdüğü hakkında bilgi depolar. " Logrotate manpage bir "devlet dosyası" denir söylüyor.

Burada ServerFault'da da yararlı olabilecek başka bir tartışma var:

Logrotate “günlük” ile tam olarak nasıl baş eder?

Bu tartışmada "MadHatter", aşağıdakiler hakkında, "durum" (eyalet) dosyasıyla ilgili olarak şunları söylüyor:

"Her dosyanın, en son döndürüldüğü tarih olan bir satırı vardır; geçerli bir tarih ile dosyadaki tarih arasındaki gün sayısı göz önüne alındığında, belirli bir dosyanın döndürüleceği bir tarihte logrotate çalıştırırsanız ( 1 günlük, 7 haftalık, vb.), Dosya döndürülür. "

Umarım bu yardımcı olur.


0

Eğer mysqladminbir kullanıcı veya şifre gerektiren sol bunu okumazlar /root/.my.cnfdeğişiklik yapmadan yapılandırma.

Ne olduğunu görmek için çıkışınızı kayıt cihazına aktarmayı deneyin.

  postrotate
      # just if mysqld is really running
      if test -x /usr/bin/mysqladmin && \
         /usr/bin/mysqladmin ping &>/dev/null
      then
         env HOME=/root/ /usr/bin/mysqladmin flush-logs 2>&1 | logger
      else
         logger "mysqladmin ping failed so not rotating mysql logs"
      fi
  endscript

MySQL döndürdükten sonra yeni dosyaya hata kaydetmiyor mu?

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.