Soru günlükleri döndürmemek için logrotate


Bu logrotate yapılandırmam var ve Ubuntu 10.04 üzerinde ç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 dün /etc/logrotate.d dizinine koydum ve bugün günlüğün 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ı root olarak çalıştırıldığında iyi çalışır
  3. mysql, mysql-slow.log dosyasına yazabiliyor

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'ın başarılı olduğunu gösteren kayıt nerede? Bir problem olduğunu söyleyecek bir şey olup olmadığını görmek istiyorum.
  2. Logrotate'ın neden çalışmadığına dair herhangi bir fikir var mı?

19
2018-03-29 19:43


Menşei


Yani el ile çalıştırıldığında işe yarıyor mu? mı crond çalışan? - Kyle Smith
evet, eğer logrotate -f mysql_slow_query'yi kastediyorsanız çalışıyor. 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 mysql-server? Koşmak grep '/var/log/mysql' /etc/logrotate.d/*. - Zoredache
Bu komutu çalıştırdım ve sadece konfigürasyonum / var / log / mysql içinde bir şey yapıyormuş gibi görünüyorum. - Carmen
Ubuntu kurulumunuzda günlük cron işleri günün hangi saatinde çalışır? Bu bilgiyi /etc/crontab dosya, ile biten satırda /etc/cron.daily ). Belki de o günkü cron günlük işleri zaten çalıştıktan sonra logrotate yapılandırmasını yarattın mı? - ricmarques


Cevaplar:


Genel bir sorun, günlük bir logrotate.d girdisini ilk kez ayarladığınızda, ilk günü döndürmez. Zamana dayalı bir rotasyon kullandığınızda (günlük / haftalık / aylık) logrotate, dosyada gördüğü son tarihin bir tarih damgasını işaretler. /var/lib/logrotate/status (veya /var/lib/logrotate.status RHEL sistemlerinde).

Karalanmış tarih, gelecekteki çalışmalarının referans tarihi olur. logrotate 'günlük' rotasyonları karşılaştırmak için kullanacaktır. Varsayılan cron işi günlük olarak çalıştığı için, bu genellikle günlük işlerde sadece bir sorundur.

Bu problemi iki şekilde önleyebilirsiniz;

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

    • Bu, günlükleri döndüren OST'yi tarih dosyasına karalayacaktır.

  2. Düzenle /var/lib/logrotate/status ve satırı manuel olarak ekleyin:

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

    • bugünün veya bir önceki tarihe ayarlanması. Sonraki çalışma, çalışmasına neden olmalıdır.

39
2018-04-09 15:29



Bir şampiyon gibi çalışır! - Seth
Aslında o yapar kullandığında günlükleri döndür -f (en azından RH türevimde). - bufh
-f Kuvvet Döndürme için -d Hata ayıklama için, ayrıca hata ayıklama kuru çalışma anlamına gelir; -d açık. - ThorSummoner


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

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

... /var/lib/logrotate/status dosya "her bir günlük dosyasını en son ne zaman döndürdüğüyle ilgili bilgileri depolar.". manpage logrotate buna "durum dosyası" denir diyor.

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

Logrotate tam olarak "günlük" işlemeyi nasıl yapar?

Bu tartışmada, "MadHatter", "durum" (durum) dosyasıyla ilgili olarak aşağıdakileri belirtmektedir:

"Her dosya, en son döndürülme tarihi olan bir satıra sahiptir, eğer geçerli tarih ve dosyadaki tarih arasındaki gün sayısı verilirse, belirli bir dosyanın döndürme için gerekli olduğu bir tarihte logrotate çalıştırırsanız ( Günlük olarak 1, haftada 7, vb.), Dosya döndürülecektir. "

Umarım bu yardımcı olur.


4
2018-03-30 21:35





Eğer mysqladmin bir kullanıcı veya şifre gerektirmez. /root/.my.cnf modifikasyon olmadan konfigürasyon.

Ne olduğunu görmek için çıkışınızı kaydediciye pipetlemeyi 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önüşten sonra yeni dosyaya hatayı kaydetmiyor mu?


0
2017-08-13 03:31