logrotate tidak memutar log

24

Saya memiliki konfigurasi logrotate ini dan saya menjalankan Ubuntu 10.04.

/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

}

Saya menaruh ini di /etc/logrotate.d kemarin dan hari ini log tidak diputar.

Berikut adalah hal-hal yang telah saya lakukan:

  1. Saya memverifikasi bahwa log tersebut memang ada di /var/log/mysql/mysql-slow.log
  2. baris mysqladmin berfungsi dengan baik saat dijalankan sebagai root
  3. mysql dapat menulis ke mysql-slow.log

Ketika saya melakukan ini:

$ 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. Di mana log yang menunjukkan bahwa logrotate berhasil? Saya ingin melihat apakah ada sesuatu yang akan mengatakan bahwa ada masalah.
  2. Adakah ide mengapa logrotate tidak berfungsi?
Carmen
sumber
Jadi itu berhasil ketika dieksekusi dengan tangan? Sedang crondberlari?
Kyle Smith
ya itu berfungsi, jika Anda maksud logrotate -f mysql_slow_query. Dan crond sedang berjalan.
Carmen
Apakah Anda yakin tidak ada konfigurasi lain yang seharusnya menangani file log itu? Mungkin mysql-server? Lari grep '/var/log/mysql' /etc/logrotate.d/*.
Zoredache
Saya menjalankan perintah itu dan hanya konfigurasi saya muncul sebagai melakukan sesuatu di / var / log / mysql
Carmen
Pada jam berapa pekerjaan cron harian berjalan di pengaturan Ubuntu Anda? Anda dapat menemukan informasi itu di /etc/crontabfile, di baris yang berakhir dengan /etc/cron.daily ). Mungkin Anda membuat konfigurasi logrotate setelah pekerjaan harian cron untuk hari itu sudah berjalan?
ricmarques

Jawaban:

47

Masalah umum adalah ketika Anda pertama kali mengatur entri logrotate.d harian, itu tidak akan diputar pada hari pertama. Ketika Anda menggunakan rotasi berdasarkan waktu (harian / mingguan / bulanan) logrotate mencoret-coret cap tanggal dari tanggal terakhir itu melihat file di /var/lib/logrotate/status(atau /var/lib/logrotate.statuspada sistem RHEL).

Tanggal yang dicorat-coret menjadi tanggal referensi dari yang akan dijalankan di masa depan logrotateuntuk membandingkan rotasi 'harian'. Karena pekerjaan cron default berjalan setiap hari, ini biasanya hanya masalah dalam pekerjaan harian.

Anda dapat menghindari masalah ini dengan dua cara;

  1. menjalankan sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • Ini akan menuliskan tanggal ke file status dan memutar log

  2. Edit /var/lib/logrotate/statusdan tambahkan baris secara manual:

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

    • mengaturnya ke hari ini atau tanggal sebelumnya. Run berikutnya harus menyebabkannya berjalan.
pengguna168717
sumber
Bekerja seperti jagoan!
Seth
6
Sebenarnya itu tidak rotate log saat menggunakan -f(setidaknya pada turunan RH saya).
bufh
12
-funtuk Force Rotation, -duntuk Debug, juga debug menyiratkan run kering sehingga tidak ada perubahan yang benar-benar akan dibuat ketika -dsedang aktif.
ThorSummoner
1
-dmenyiratkan dry run adalah hal yang sulit. Tidak ada perubahan yang dilakukan, dan saya menggaruk-garuk kepala sampai saya menyadari fakta ini.
Artem Russakovskii
5

Menurut artikel Slicehost berikut:

Memahami logrotate di Ubuntu - bagian 2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... /var/lib/logrotate/statusfile " menyimpan informasi tentang kapan terakhir diputar setiap file log. " Halaman logrotate mengatakan yang disebut "file negara".

Ada diskusi lain di sini di ServerFault yang mungkin juga berguna:

Bagaimana logrotate menangani "sehari-hari"?

Dalam diskusi itu, "MadHatter" mengatakan, mengenai hal-hal berikut, mengenai file "status" (negara bagian):

"Setiap file memiliki satu baris, yang merupakan tanggal terakhir diputar; jika Anda menjalankan logrotate pada tanggal tertentu sehingga file yang diberikan akan diputar, diberikan jumlah hari antara tanggal saat ini dan tanggal dalam file ( 1 untuk harian, 7 untuk mingguan, dll.), File akan diputar. "

Saya harap ini membantu.

becak
sumber
0

Jika mysqladminmemerlukan pengguna atau kata sandi, ia tidak akan membacanya dari /root/.my.cnfkonfigurasi tanpa modifikasi.

Coba perpip output Anda ke logger untuk melihat apa yang terjadi.

  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 tidak mencatat kesalahan pada file baru setelah diputar?

KCD
sumber