copytruncate funciona muito bem para o logrotation.
uma configuração semelhante a esta deve fazer o trabalho para você:
/var/log/mongodb/*.log {
daily
missingok
rotate 5
compress
dateext
delaycompress
copytruncate
notifempty
}
Os docs do Mongo dizem que eu posso:
Eu quero que a capacidade de logrotate do sistema operacional zipar arquivos antigos e remover os mais antigos, mas não vejo como dizer ao processo mongod para alternar o log atual, a não ser enviar SIGUSR1.
Então eu escrevi
/var/log/mongodb/*.log {
daily
rotate 5
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/usr/bin/killall -SIGUSR1 mongod
/usr/bin/killall -SIGUSR1 mongos
endscript
}
para /etc/logrotate.d/mongo.
E agora obtenha logfiles bem conhecidos do logrotate e logfiles vazios como mongodb.log.2013-09-18T23-49-44
como traços de comutação SIGUSR1. Como se livrar do último?
O servidor travou por mim se você enviar SIGUSR1 para o mongod depois de ter removido o arquivo de log do logrotate.
A seguinte configuração é segura para a versão que testei - 2.6.6 no ubuntu 12.04 - os exemplos anteriores travaram o servidor. Coloque isso em /etc/logrotate.d/mongod:
/var/log/mongodb/mongodb.log {
weekly
missingok
rotate 4
compress
notifempty
create
postrotate
/usr/bin/pkill -USR1 mongod
rm /var/log/mongodb/mongodb.log.????-??-??T??-??-??
endscript
}
Veja: link para mais detalhes e uma sugestão de Akshay Kumar que usei acima (use create em vez de nocreate e cp / dev / null para o arquivo de log).
Em lançamentos posteriores, supõe-se ser uma opção logRotate que você pode usar para reabrir o arquivo - não renomeá-lo - que funcionará em torno do problema de renomeação - mas não funcionou na minha versão (não foi suportado). / p>
Veja: link
Eu testei isso com
logrotate -v -f /etc/logrotate.d/mongod
Desde o mongodb 3.0 você pode mudar o comportamento do mongodb com o parâmetro logRotate, mudar em /etc/mongod.conf
systemLog:
logAppend: true
logRotate: reopen
Veja também Manuais do Mongo .
Então você pode usar esta configuração de logrotate:
/var/log/mongodb/*.log {
daily
rotate 30
size 50M
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/bin/kill -SIGUSR1 'cat /var/lib/mongodb/mongod.lock 2> /dev/null' 2> /dev/null || true
endscript
}
O seguinte funcionou para mim:
/var/log/mongo/mongod.log {
missingok
rotate 3
size 100M
nodateext
postrotate
/usr/bin/kill -USR1 $(cat /var/run/mongod.pid)
rm -f /var/log/mongo/mongod.log.[0-9][0-9][0-9][0-9]-*
endscript
}
Notas:
kill
é um Bash embutido, mas logrotate é executado sob /bin/sh
- que não reconhece SIGUSR1
no RedHat 6.5 compress
, mas deve ser uma adição direta Observe que, na versão 3.0 e superior, não é necessário eliminar o daemon do banco de dados simplesmente para rotacionar um log. Consulte a documentação aqui: