FreeBSD
Rotação de Arquivos de Log
Para que não tenhamos arquivos de log muito grandes, geralmente se implementa
alguma forma de rotacionar estes arquivos. Isto é feito normalmente através
do newsyslog ou através de scripts. Iremos geralmente optar pelos scripts,
devido à flexibilidade que proporciona. Segue abaixo um exemplo de script.
Crie o arquivo /usr/local/script/rotate_log_programa.sh, com a permissão
700 e o seguinte conteúdo:
-------------------- Arquivo rotate_log_programa.sh --------------------
#!/bin/sh
# finaliza o Programa
/comando/para/finalizar/o/programa
# Define o nome para arquivamento
OLD_LOG=/caminho/para/o/arquivamento/programa.log.`date +%y%m%d-%H%M%S`
# move o arquivo para o diretorio
de arquivamento
mv /arquivo/de/log/programa.log `echo $OLD_LOG`
# inicializa o Programa
/comando/para/inicializar/o/programa
# compacta o arquivado
/usr/bin/gzip $OLD_LOG
# apaga os logs com mais de
um ano
find /caminho/para/o/arquivamento -mtime +365 -exec rm -f {} \;
-------------------- Fim do arquivo rotate_log_programa.sh --------------------
Edite o arquivo /etc/crontab e adicione uma linha para executar o script na
hora desejada, como por exemplo:
0 0 1 * * root /usr/local/script/rotate_log_programa.sh
Isto fará com que o script de rotação do log seja acionado à meia-noite do primeiro dia do mês, separando os logs de cada mês em arquivos diferentes. Cada arquivo guardado terá data e hora anexado ao nome. O comando find é opcional e pode ser configurado com outro período de tempo.
Pode-se também utilizar um script mais elaborado, como o que segue abaixo. O que irá determinar isso é a preferência do administrador, que tem a liberdade de criar e personalizar os scripts como desejar.
-------------------- Arquivo rotate_exemplo.sh --------------------
#!/bin/sh
# Script para fazer o rotate de logs.
# Comando para finalizar o
servico.
# Deve ser especificado entre '...'
# Caso nao for necessario, deixar em branco.
COMFIN=''
# Comando para inicializar
o servico.
# Deve ser especificado entre '...'
# Caso nao for necessario, deixar em branco.
COMINI=''
# Diretorio para o arquivamento
dos logs antigos.
DIRARQ=/diretorio/para/arquivamento
# Diretorio onde fica o arquivo
de log atual.
DIRLOG=/diretorio/do/log/atual
# Nome do arquivo de log.
NOMELOG=nome_do_arquivo_de_log.log
# Dono do arquivo de log.
USULOG=root
# Grupo do arquivo de log.
GRPLOG=wheel
# Modo de permissao do arquivo
de log.
PERLOG=600
# Compactar o arquivado (S/N).
COMPACTAR=S
# Apagar arquivos antigos
(S/N).
APAGA_ANTIGOS=N
# Tempo em dias que os antigos
deverao ser mantidos.
# Qualquer arquivo no diretorio dos antigos com idade
# superior ao especificado sera apagado.
TEMPO_ANTIGOS=180
#####################################################
$COMFIN > /dev/null
LOGARQ=$DIRARQ/$NOMELOG.`date +%y%m%d-%H%M%S`
LOGATU=$DIRLOG/$NOMELOG
mv $LOGATU $LOGARQ
touch $LOGATU
chown $USULOG $LOGATU
chgrp $GRPLOG $LOGATU
chmod $PERLOG $LOGATU
$COMINI > /dev/null
if [ $COMPACTAR = S ] ; then
/usr/bin/gzip $LOGARQ
fi
if [ $APAGA_ANTIGOS = S ] ; then
find $DIRARQ -mtime +$TEMPO_ANTIGOS -exec rm -f {} \;
fi
-------------------- Fim do arquivo rotate_exemplo.sh --------------------
Atualizado em 06/02/04.
Heini Thomas Geib.
http://www2.unijui.edu.br/~heini