rotate.sh - Rotaciona arquivos de acordo com a data
Publicado por Aécio dos Santos Pires (última atualização em 23/09/2015)
[ Hits: 5.259 ]
Homepage: http://aeciopires.com
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).
#!/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
Script de Backup do Perfil dos Usuários do Sistema em Batch do Windows
Backup do PostgreSQL 8.3 e aviso por e-mail
Backup utilizando rsync com envio do log e informativo via e-mail
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? (12)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)
Problema em SSD ao dar boot LinuxMint LMDE FAYE 64 (3)









