rotate.sh - Rotaciona arquivos de acordo com a data

Publicado por Aécio dos Santos Pires (última atualização em 23/09/2015)

[ Hits: 4.960 ]

Homepage: http://aeciopires.com

Download rotate.sh




Rotaciona arquivos de acordo com a data no formato (AAAAMMDD).
Sintaxe de uso:

$ sudo rotate.sh [OPCOES]

Opcoes:
-a - exibe informacoes sobre o script.

Exemplo:

Rotate do log do Tomcat:

$ sudo rotate.sh

Obs.: informe o nome do arquivo diretamente na variavel '\$FILE' dentro do script na seção de declaração de variáveis para fazer rotação de um arquivo fixo (uso combinado com o crontab).

  



Esconder código-fonte

#!/bin/bash
#-------------------------------------------------------
# file:         rotate.sh
# comment:      Rotaciona arquivos de acordo com a data
# author:       Aecio Pires e Denio Mariz<aeciopires,deniomariz@gmail.com>
# date:         08-set-2015
# revision:     Aecio Pires <aeciopires@gmail.com>
# Last updated: 08-set-2015, 16:48
#-------------------------------------------------------

# OBS.:
#       0- De permissao de execucao ao script com o comando abaixo.
#               sudo chmod +x PATH/rotate.sh
#       2- Execute-o script com o comando abaixo.
#               sudo PATH/rotate.sh
#   Onde: PATH => deve ser substituído pelo diretorio em que esta o script.


#Fonte: http://stackoverflow.com/questions/30883779/shell-script-rotate-files-while-the-file-keep-on-updating-with-data

################################################################
# Funcoes Gerais
################################################################

about(){
echo "#------------------------------------------------------#"
echo "file: $CMDLINE"
echo "version: 1.0"
echo "comment: Rotaciona arquivos de acordo com a data"
echo "author: Aecio Pires"
echo "date: 08-set-2015"
echo "revision: Aecio Pires <aeciopires@gmail.com>"
echo "last updated: 08-set-2015, 16:48"
echo "#------------------------------------------------------#"

exit 0
}

#----------------------------------------------------
# comment: Informa se o usuario que estah executando o script eh root
# syntax: isroot
# return: YES ou NO
#
isroot(){
MYUID=$(id | cut -d= -f2 | cut -d\( -f1)
[ $MYUID -eq 0 ] && echo YES || echo NO
}

#----------------------------------------------------
# Informa o modo correto de usar o script
usage() {
echo "Sintaxe de uso: sudo $CMDLINE [OPCOES]"
echo "Opcoes: "
echo "-a        => exibe informacoes sobre o script."
echo ""
echo "Exemplos:"
echo ""
echo "Rotate do log do Tomcat:"
echo "sudo $CMDLINE /var/log/tomcat/catalina.out"
echo ""
echo "Ou Informe o nome do arquivo diretamente na variavel '\$FILE' dentro do script na secao de declaracao de variaveis."
}

#----------------------------------------------------
# Checa os parametros passados para o script
checkInput(){

# Obtendo os parametros e identificando as opcoes
while getopts ":a" OPT ; do
        case $OPT in
                a)
                        about
                ;;
                *)
                        echo "[ERRO] Erro interno na passagem dos paramentros."
                        exit 3
                ;;
        esac
done
shift $(($OPTIND - 1))

}

#-----------------------------------------------
#-----------------------------------------------
# MAIN
#-----------------------------------------------
#-----------------------------------------------

#**********************************************#
# Declaracao de variaveis globais
#**********************************************#
CMDLINE=$(readlink --canonicalize --no-newline "$BASH_SOURCE")
PROGDIRNAME=$(dirname $(readlink -f "$BASH_SOURCE"))
USER_ID=$(id | cut -d" " -f1 )
SERVER=$(hostname)


#Arquivo a ser rotacionado
#FILE=$1
FILE=$PROGDIRNAME/../logs/catalina.out
PERMISSION=$(stat -c "%a" $FILE)
USER=$(stat -c "%U" $FILE)
GROUP=$(stat -c "%G" $FILE)
DATE=`date +%Y%m%d`
NEWFILE="$FILE-$DATE"
#**********************************************#




if [ $(isroot) = NO ] ; then
        echo "[ERRO] Voce deve ser root para executar este script."
        exit 255
fi

if ! checkInput $* ; then
        echo "[ERRO] Parametro invalido passado na chamada do script."
        exit 3
fi

if [ ! -f $FILE ]; then
    echo "[ERRO] O arquivo $FILE nao foi encontrado no host."
    exit 1
fi




#Fazendo o rotate (assim o processo que esta alterando o arquivo no momento do rotate nao fica travado)
cp $FILE $NEWFILE
cat /dev/null > $FILE
#Fazendo o rotate (assim o processo que esta alterando o arquivo no momento do rotate fica travado)
#mv $FILE $NEWFILE
#chmod $PERMISSION $FILE
#chown $USER:$GROUP $FILE

if [ ! -f $NEWFILE ]; then
    echo "[ERRO] O arquivo $NEWFILE nao foi encontrado no host. O rotate nao funcionou."
    exit 4
elif [ ! -f $FILE ]; then
    echo "[ERRO] O arquivo $FILE nao foi criado no host apos o rotate. O rotate nao funcionou."
    exit 5
else
    echo "[OK] O rotate funcionou."
    echo "Os arquivos $FILE e $NEWFILE existem e contem as seguintes caracteristicas..."
    echo "FILE=> $FILE"
    LS=$(ls -ld $FILE)
    echo "PERMISSION=: $LS"
    echo ""
    echo "NEWFILE=> $NEWFILE"
    LS=$(ls -ld $NEWFILE)
    echo "PERMISSION=> $LS"
fi

Scripts recomendados

Script de backup Graylog

Backup RSYNC

clonagem de disco

Fazendo backup e compactando

Backup do PostgreSQL 8.3 e aviso por e-mail


  

Comentários
[1] Comentário enviado por matheusmmo em 24/09/2015 - 19:07h

Desculpa minha ignorancia, mas o que seria "dar um rodate"?

[2] Comentário enviado por aeciopires em 28/09/2015 - 08:54h

Olá, Matheus!

Não é "rodate". É "rotate", que significa rotacionar. No caso aqui, o script serve para rotacionar arquivos.

Ex.: Imagine que você tenha um arquivo de log, chamado catalina.log, usado pelo Tomcat. Este arquivo terá o seu tamanho aumentado conforme o Tomcat vai sendo usado ao longo do tempo. Dependendo do uso, este arquivo de log pode chegar a ter 3 GB de tamanho em três meses. Se você tiver um problema e precisar ver o registro de log neste arquivo, vai demorar muito tempo só para abrí-lo e pode ser que você não precise saber o que aconteceu há três meses para resolver o problema.

Então, para resolver isso problema, facilitar a remoção de logs desnecessários e liberar o espaço em disco, você pode usar este script para rotacionar o arquivo de log.
Quando o script é executado, o mesmo move o arquivo de log catalina.log, por exemplo, para catalina.log-20150927 e cria um arquivo catalina.log vazio mantendo todas as permissões de acesso. Assim, você pode depois apagar o arquivo catalina.log-20150927, se ele não for mais necessário.

Assim você pode agendar a execução diária do arquivo para que todo dia ele rotacione o arquivo catalina.log. Eu dei o exemplo do arquivo catalina.log, mas isso serve para qualquer arquivo. É só passar por parâmetro. O script tem um help.

Abraço e fica com Deus.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts