logrotate non ruota i log


24

Ho questa configurazione logrotate e sto eseguendo su 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

}

L'ho inserito ieri in /etc/logrotate.d e oggi il registro non è stato ruotato.

Di seguito sono le cose che ho fatto:

  1. Ho verificato che il registro è effettivamente in /var/log/mysql/mysql-slow.log
  2. Le linee mysqladmin funzionano bene quando eseguite come root
  3. mysql è in grado di scrivere su mysql-slow.log

Quando ho fatto questo:

$ 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. Dov'è il registro che mostra che logrotate ha avuto successo? Voglio vedere se c'è qualcosa che direbbe che c'era un problema.
  2. Qualche idea sul perché il logrotate non funzioni?

Quindi funziona se eseguito a mano? Sta crondcorrendo?
Kyle Smith,

sì, funziona, se vuoi dire logrotate -f mysql_slow_query. E crond sta correndo.
Carmen,

Sei sicuro che non ci sia già un'altra configurazione che dovrebbe gestire quel file di registro? Forse mysql-server? Corri grep '/var/log/mysql' /etc/logrotate.d/*.
Zoredache,

Ho eseguito quel comando e solo la mia configurazione si presenta come se stesse facendo qualcosa in / var / log / mysql
Carmen

A che ora del giorno vengono eseguiti i cron job giornalieri nella configurazione di Ubuntu? È possibile trovare tali informazioni nel /etc/crontabfile, nella riga che termina con /etc/cron.daily ). Forse hai creato la configurazione logrotate dopo che i lavori cron cron per quel giorno erano già stati eseguiti?
ricmarques,

Risposte:


47

Un problema comune è quando si imposta per la prima volta una voce logrotate.d giornaliera, non ruoterà il primo giorno. Quando si utilizza una rotazione basata sul tempo (giornaliera / settimanale / mensile), il logrotate scrive un timbro della data dell'ultima data in cui ha visto il file /var/lib/logrotate/status(o /var/lib/logrotate.statussui sistemi RHEL).

La data scarabocchiata diventa la data di riferimento di quelle future serie che logrotateverranno utilizzate per confrontare le rotazioni "giornaliere". Poiché il processo cron predefinito viene eseguito quotidianamente, questo è in genere solo un problema nei lavori quotidiani.

È possibile evitare questo problema in due modi;

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

    • Ciò scarabocchierà la data nel file di stato e ruoterà i registri

  2. Modifica /var/lib/logrotate/statuse aggiungi la linea manualmente:

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

    • impostandolo sulla data odierna o precedente. La prossima esecuzione dovrebbe farla funzionare.

Funziona come un campione!
Seth

6
In realtà fa ruotare i registri quando si utilizza -f(almeno sul mio derivato RH).
bu

12
-fper Force Rotation, -dper Debug, anche il debug implica una corsa a secco, quindi non verranno apportate modifiche mentre -dè attivo.
ThorSummoner,

1
-dimplicando la corsa a secco è difficile. Non sono state apportate modifiche e mi ha fatto grattare la testa fino a quando non ho capito questo fatto.
Artem Russakovskii,

5

Secondo il seguente articolo di Slicehost:

Comprensione logrotate su Ubuntu - parte 2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... il /var/lib/logrotate/statusfile " memorizza le informazioni sull'ultima rotazione di ciascun file di registro ". La manpage logrotate dice che si chiama "file di stato".

C'è un'altra discussione qui in ServerFault che può anche essere utile:

In che modo logrotate gestisce esattamente "quotidianamente"?

In quella discussione, "MadHatter" dice, riguardo a quanto segue, riguardo al file "status" (stato):

"Ogni file ha una riga, che è la data in cui è stata ruotata l'ultima volta; se esegui logrotate in una data tale che un determinato file deve essere ruotato, dato il numero di giorni tra la data corrente e la data nel file ( 1 per quotidiano, 7 per settimanale, ecc.), Il file verrà ruotato. "

Spero che aiuti.


0

Se mysqladminrichiede un utente o una password, non verrà letto dalla /root/.my.cnfconfigurazione senza modifiche.

Prova a reindirizzare il tuo output al logger per vedere cosa sta succedendo.

  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 non registra l'errore nel nuovo file dopo la rotazione?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.