Logrotate na Spdc00

Description

O /var/log/srm-spdc00Domain.log eventualmente fica gigante, enchendo o /var da spdc00. A idéia é rotacionar (fazer backup e criar novos arquivos de log) esse log usando o logrotate, acionado via crontab. A configuraćão é feita no /etc/logrotate.conf:

# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
compress
# system-specific logs may be also be configured here.
/var/log/srm-spdc00Domain.log  {
        weekly
        create 0664 root root
        size 250M
        rotate 1
}

As primeira linhas afetam o desempenho global do logrotate, que será feito semanalmente, manterá os últimos quatro arquivos de backup, criará novos e irá comprimir ( no caso ficaria arquivo.1.gz, arquivo.2.gz, arquivo.3.gz e arquivo.4.gz). Inclui na ultima linha as instrućões específicar a esse log, semanalmente, irá criar um novo no lugar com permissão 664 pertencente ao root, grupo root, o tamanho máximo será de 250 Mb e manterá somente uma cópia do anterior (srm-spdc00Domain.log.1.gz). O problema é que rodando

logrotate /etc/logrotate.conf
realmente ele limpava, mas não preenchia o arquivo de log. Este ficava ainda rodando no anterior, como dava para ver usando
lsof /dev/sda5
(sda5 é o /var). Ficava um processo rodando no arquivo de log deletado. Isso é resolvido mantando o processo e automaticamente ele migra para o novo log. Bom, inclui no /etc/cron.daily/logrotate uma linha que fizesse esse servico:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
lsof /dev/sda5| grep "deleted"|tail -1|cut -f7-10 -d' '|xargs kill -9
exit 0

A sexta linha faz o servico: passa o lsof no /var e usando o grep seleciona as linha com deleted. As vezes são redundantes então selecionamos uma com o tail e escolhemos o campo que tem o pid do processo usando o cut, que é passado como argumento para o kill -9.

Updates

Marco em 15/04/2007

O /etc/cron.daily/logrotate ficou finalmente assim
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
DELPID=`lsof /dev/sda5|tr -s ' ' ' ' |grep "srm-spdc00Domain"| grep "deleted"|tail -1|cut -f2 -d' '`
while  [ "$DELPID" ]; do
kill -9 $DELPID
DELPID=`lsof /dev/sda5|tr -s ' ' ' ' |grep "srm-spdc00Domain"| grep "deleted"|tail -1|cut -f2 -d' '`
done
exit 0

Assim elimina o problema da saída esquisita do lsof que as vezes não permitia que o processo fosse morto e também evita a enxurrada de e-mails de log quando o arquivo não é removido, devido ao erro do rm por não ter argumento.

Ciclano em dd/mm/aaaa

Mais comentarios
Topic revision: r2 - 2007-04-17 - MarcoAndreFerreiraDias
 

This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback

antalya escort bursa escort eskisehir escort istanbul escort izmir escort