Eu tenho essa configuração de logrotate e estou executando 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
}
Coloquei isso em /etc/logrotate.d ontem e hoje o log não foi girado.
Abaixo estão as coisas que eu fiz:
- Eu verifiquei que o log está realmente em /var/log/mysql/mysql-slow.log
- Linhas mysqladmin funcionam bem quando executadas como root
- O mysql pode escrever no mysql-slow.log
Quando eu 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
- Onde está o log que mostra que o logrotate foi bem-sucedido? Quero ver se há algo que diria que houve um problema.
- Alguma idéia de por que o logrotate não está funcionando?
crond
correndo?mysql-server
? Corragrep '/var/log/mysql' /etc/logrotate.d/*
./etc/crontab
arquivo, na linha que termina com/etc/cron.daily )
. Talvez você tenha criado a configuração do logrotate após a execução das tarefas diárias do cron naquele dia?Respostas:
Um problema comum é que quando você configura uma entrada diária logrotate.d pela primeira vez, ela não gira no primeiro dia. Quando você usa um logrotate de rotação baseado em tempo (diário / semanal / mensal), rabisca um carimbo de data da última data em que viu o arquivo
/var/lib/logrotate/status
(ou/var/lib/logrotate.status
nos sistemas RHEL).A data rabiscada se torna a data de referência a partir das quais as execuções futuras
logrotate
serão usadas para comparar as rotações 'diárias'. Como o trabalho cron padrão é executado diariamente, isso normalmente é apenas um problema nos trabalhos diários.Você pode evitar esse problema de duas maneiras;
corre
sudo logrotate -f /etc/logrotate.d/<my rotate job>
Edite
/var/lib/logrotate/status
e adicione a linha manualmente:"/var/log/my_special.log" 2013-4-8
fonte
-f
(pelo menos no meu derivado RH).-f
for Force Rotation,-d
for Debug, a depuração também implica em execução a seco, portanto nenhuma alteração será feita enquanto-d
estiver ativada.-d
implicando corrida a seco é complicado. Nenhuma mudança estava sendo feita, e eu tinha coçado a cabeça até perceber esse fato.De acordo com o seguinte artigo do Slicehost:
Entendendo o logrotate no Ubuntu - parte 2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2
... o
/var/lib/logrotate/status
arquivo " armazena informações sobre quando ele girou pela última vez cada arquivo de log. ". A página de manual do logrotate diz que isso é chamado de "arquivo de estado".Há outra discussão aqui no ServerFault que também pode ser útil:
Como o logrotate lida exatamente com "diariamente"?
Nessa discussão, "MadHatter" diz, sobre o seguinte, sobre o arquivo "status" (estado):
Eu espero que isso ajude.
fonte
Se
mysqladmin
requer um usuário ou senha, ele não será lido da/root/.my.cnf
configuração sem modificação.Tente canalizar sua saída para o registrador para ver o que está acontecendo.
O MySQL não registra erro no novo arquivo após a rotação?
fonte