logrotate não girando os logs

19

Eu tenho essa configuração de logrotate e estou rodando no 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

}

Eu coloquei isso em /etc/logrotate.d ontem e hoje o log não foi girado.

Abaixo estão as coisas que eu fiz:

  1. Verifiquei que o log está de fato em /var/log/mysql/mysql-slow.log
  2. As linhas mysqladmin funcionam bem quando são executadas como root
  3. o mysql é capaz de gravar no mysql-slow.log

Quando fiz isso:

$ 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. Onde está o log que mostra que o logrotate foi bem sucedido? Eu quero ver se há algo que diga que houve um problema.
  2. Alguma idéia de por que o logrotate não está funcionando?
por Carmen 29.03.2012 / 21:43

3 respostas

39

Um problema comum é quando você configura uma entrada logrotate.d por dia, ele não roda o primeiro dia. Quando você usa uma rotação com base no tempo (diário / semanal / mensal), o logrotate marca um registro de data da última data em que viu o arquivo em /var/lib/logrotate/status (ou /var/lib/logrotate.status nos sistemas RHEL).

A data rabiscada se torna a data de referência das execuções futuras de logrotate usadas para comparar as rotações "diárias". Como o cron job padrão é executado diariamente, isso geralmente é apenas um problema em tarefas diárias.

Você pode evitar esse problema de duas maneiras;

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

    • Isso irá rabiscar a data no arquivo de status comOUT girando os logs

  2. Edite /var/lib/logrotate/status e adicione a linha manualmente:

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

    • defini-lo para a data de hoje ou anterior. A próxima execução deve fazer com que seja executado.
por 09.04.2013 / 17:29
4

De acordo com o seguinte artigo do Slicehost:

Entendendo o logrotate no Ubuntu - parte 2
link

... o arquivo /var/lib/logrotate/status " armazena informações sobre quando a última rotação foi feita em cada arquivo de log. ". A página do logrotate diz que é chamada de "arquivo de estado".

Há outra discussão aqui no ServerFault que também pode ser útil:

Como o logrotate lida exatamente com o "diário"?

Nessa discussão, "MadHatter" diz, a respeito do seguinte, com relação ao arquivo "status" (estado):

" Each file has one line, which is the date on which it was last rotated; if you run logrotate on such a date that a given file is due for rotation, given the number of days between current date and the date in the file (1 for daily, 7 for weekly, etc.), the file will be rotated. "

Espero que isso ajude.

    
por 30.03.2012 / 23:35
0

Se mysqladmin exigir um usuário ou senha, ele não o lerá da configuração /root/.my.cnf sem modificação.

Tente colocar sua saída no logger para ver o que está acontecendo.

  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

O MySQL não registra erros em novos arquivos após a rotação

    
por 13.08.2014 / 05:31

Tags