Rotacionar arquivos

1. Rotacionar arquivos

João Paulo Carneiro
jptudobem

(usa Debian)

Enviado em 23/02/2011 - 17:20h

Opa, baum?

Seguinte, tenho uma aplicação que emite notas fiscais. Cada nota fiscal, gera um arquivo .xml em um determinado diretório no meu servidor.
Hoje, esse meu diretório conta com mais de 600mil arquivos, o que claro, super lotou.

Bom, pensei em fazer um script para compactar todos esses arquivos por mês. Ou seja, se no mês de Janeiro, gerou 300 arquivos, compactar esses 300 arquivos. Compactar de acordo com a data de criação.

Pensei também em fazer através do logrotate dessa forma:

/sist/tmp/*.xml {
compress
monthly
dateext
rotate 1
postrotate
/etc/init.d/syslog reload
endscript
}

Porém tenho algumas dúvidas como:

- Dessa forma vai rotacionar os arquivos já existentes?
- Ele vai rotacionar todo mês ou vai rotacionar todos arquivos que pertecem a aquele mês?
- O que significa esse rotate 1? Ele diz que é ó numero de rotates antes de apagar o arquivo. Ficou meio vago pra mim.

Espero que me ajudem mais uma vez.
Valeu!


  


2. Re: Rotacionar arquivos

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/02/2011 - 18:57h

vc pode usar a msm logica de um backup, separar por data, ou neses caso, por mes

ai cria as pastas e vai jogando os arquivo para as pastas certas, ai todo mes vc compacta a pasta inteira


3. Re: Rotacionar arquivos

Takahashi
signout

(usa Slackware)

Enviado em 24/02/2011 - 06:51h

Boas...

Segundo o man do logrotate:

- Dessa forma vai rotacionar os arquivos já existentes?
Sim, inclusive se voce rotacionar os arquivos e deixar nos mesmos diretorios, eles serão rotacionados e comprimidos novamente...
- Ele vai rotacionar todo mês ou vai rotacionar todos arquivos que pertecem a aquele mês?
Rotaciona tendo como base o mes, se os arquivos antigos ficarem no mesmo diretorio, entao, ele sempre rotacionara tudo...
- O que significa esse rotate 1? Ele diz que é ó numero de rotates antes de apagar o arquivo. Ficou meio vago pra mim.
se voce tem o arquivo xpto na primeira vez ele sera rotacionado para xpto.1.gz, na segunda vez, o xpto.1.gz sera apagado e sera criado um novo arquivo xpto.1.gz ou seja, mantem somente uma versão do arquivo.
Se a idéia eh fazer um backup creio que a sugestão do douglasfirm seja a melhor saida.

Há um tempo atrás, pediram para fazer um script de backup para logs, que deixasse somente o arquivo atual + 2 (total de 3 dias), segue o mesmo, basta alterar as variaveis:

**********************************************************************************
#
#!/bin/bash
#
# Script para: Compactacao de Logs
# Criado em: 26/06/2009
#

##########################
# #
# Definicao de Variaveis #
# #
##########################

DIAS_RET=`date --date "2 day ago" +%Y%m%d`
ANO=`date +%Y`
MES=`date +%b`
DATA_FULL=`date +%F`
DIR_LOGS=/logs_jboss
DIR_BACKUP=/backup_deploy/LOGS_
ARQ_LOG=/backup_deploy/Compacta_logs_$DATA_FULL.log
ERR_LOG=/backup_deploy/Compacta_logs_$DATA_FULL.err

GZIP=/bin/gzip
MKDIR=/bin/mkdir
RM=/bin/rm


#####################################################################
# #
# Cria Diretorios #
# #
# 1 - Verifica existencia de diretorio de backup #
# 2 - Caso ao exista, cria diretorio de backup baseado no ano #
# (200X) e verifica existencia de subdiretorio baseado no mes #
# 3 - Caso nao exista, cria subdiretorio de backup #
# baseado no mes (Jan..Dec) da log #
# #
#####################################################################

cria_dir (){

if [ -n $1 ];then
MES_LOG_LIT=`date --date "$1" +%b`
if [ ! -d $DIR_BACKUP$ANO ];then
echo "Criando Diretorio " $DIR_BACKUP$ANO >> $ARQ_LOG
$MKDIR $DIR_BACKUP$ANO 2>> $ERR_LOG
if [ $? -ne 0 ];then
echo "ao foi possivel criar diretorio $DIR_BACKUP$ANO verifique o erro na linha anterior" >>$ERR_LOG
exit 2
else
echo "Diretorio criado com sucesso:" $DIR_BACKUP$ANO >> $ARQ_LOG
fi
fi
if [ ! -d $DIR_BACKUP$ANO/$MES_LOG_LIT ];then
echo "cria subdir"
echo "Criando Diretorio " $DIR_BACKUP$ANO/$MES_LOG_LIT >> $ARQ_LOG
$MKDIR $DIR_BACKUP$ANO/$MES_LOG_LIT 2>> $ERR_LOG
if [ $? -ne 0 ];then
echo "Nao foi possivel criar diretorio $DIR_BACKUP$ANO/$MES_LOG_LIT verifique o erro na linha anterior" >>$ERR_LOG
exit 2
else
echo "Diretorio criado com sucesso:" $DIR_BACKUP$ANO/$MES_LOG_LIT >> $ARQ_LOG
fi
fi
else
echo "Erro ao retornar mes da log" >>$ERR_LOG
exit 1
fi
}


#####################################################################
# #
# Compacta Logs #
# #
# 1 - Compacta logs utilizando comando gzip -c log > arquivo.gz #
# este parametro permite criar copia zipada do arquivo #
# sem que o original seja perdido #
# 2 - O backup sera efetuado no diretorio definido por #
# $DIR_BACKUP$ANO/$MES_LOG_LIT #
# 3 - Apos compactacao, se codigo de retorno for 0 (OK) #
# deleta o arquivo de log #
# #
#####################################################################

compacta_logs (){

for LOGS in $1
do
echo "Compactando log" $LOGS >> $ARQ_LOG
$GZIP -c $DIR_LOGS/$LOGS > $DIR_BACKUP$ANO/$MES_LOG_LIT/$LOGS.gz 2>> $ERR_LOG
if [ $? -eq 0 ];then
echo "Compactacao efetuada com sucesso" >> $ARQ_LOG
echo "Removendo log original:" $DIR_LOGS/$LOGS >> $ARQ_LOG
$RM $DIR_LOGS/$LOGS 2>> $ERR_LOG
if [ $? -eq 0 ];then
echo "Log Removida com sucesso" >> $ARQ_LOG
else
echo "Erro na remocao da log $LOG, verifique log de erro" $ERR_LOG >> $ARQ_LOG
fi
else
echo "Erro na compactacao da log $LOG verifique log de erro" $ERR_LOG >> $ARQ_LOG
exit 3
fi

done

}


#####################################################################
# #
# Lista Logs #
# #
# 1 - Lista as logs do diretorio definido por DIR_LOGS #
# 2 - Ordena por data de criacao (--sort=time) #
# 3 - Compara Dia da log com o dia de retencao definido por DIA_RET #
# (quantas logs serao deixadas no diretorio original #
# atualmente definido como 3 - atual + 2) #
# 4 - Caso atenda ao item 3, funcao cria_dir sera acionada #
# 5 - Caso nao haja logs, grava no arquivo definido por ARQ_LOG #
# 6 - Caso ocorra algum erro, grava no arquivo definido por ERR_LOG #
# #
#####################################################################

echo "Compactacao de Logs -- " $DATA_FULL > $ARQ_LOG
echo "Compactacao de Logs Erros -- " $DATA_FULL > $ERR_LOG

for LOGS in `ls -l --sort=time $DIR_LOGS | awk '{print $6 "->" $8}' 2>>$ERR_LOG`
do
#echo $LOGS
DIA_LOG=`echo ${LOGS}| cut -f3 -d"-"`
MES_LOG=`echo ${LOGS}| cut -f2 -d"-"`
ANO_LOG=`echo ${LOGS}| cut -f1 -d"-"`
NOM_LOG=`echo ${LOGS}| cut -f2 -d">"`
DATA_FULL_LOG=$ANO_LOG$MES_LOG$DIA_LOG
if [ $DATA_FULL_LOG -lt $DIAS_RET ];then
cria_dir $ANO_LOG$MES_LOG$DIA_LOG
compacta_logs $NOM_LOG
fi


done
*****************************************************************************************

Espero que ajude.
[]s
Signout



4. Re: Rotacionar arquivos

João Paulo Carneiro
jptudobem

(usa Debian)

Enviado em 24/02/2011 - 12:08h

Aparentemente esse script resolveria, porém, ao invés de compactar todos arquivos em um único referente ao mês, ele cria a pasta do mês, joga os arquivo lá e compacta um por um. Quero compactar todos em um único arquivo ou jogar todos arquivos na pasta do mes e compatar a pasta.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts