rotate.sh - Rotaciona arquivos de acordo com a data

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

[ Hits: 2.721 ]

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 de Sistema v0.2

Backups automáticos de rádios Intelbras APC5

Realiza backup de VMs ligadas no XenServer 6.5

Backup de arquivos com rsync

Script de backup Zabbix


  

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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts