Limpeza: mudanças entre as edições

De Wiki Clusterlab.com.br
Ir para navegação Ir para pesquisar
Sem resumo de edição
 
(Sem diferença)

Edição atual tal como às 12h31min de 14 de dezembro de 2017

Esta rotina garante que não haverá duas ou mais execuções simultâneas.
Ele irá liberar espaço livre no filesystem para manter a maior quantidade de dados possível.
Sempre tentará apagar o mínimo a fim de garantir a reserva de espaço em disco livre especificado para o filesystem/diretório.
Assim, ele irá apagar arquivos mais antigos que 90 dias (90 * 24 * 60 = 129600 minutos), mas não mais novos que 90 minutos(linha 5 do código).
Politica de limpeza é executada somente se espaço livre for inferior a marca d'água, 5000000 KB.

#!/bin/bash  
export PIDFILE=/root/scripts/pid.run
function LIMPEZA() {
        echo $(date +"%Y-%m-%d_%H-%M_%S")\;Iniciando limpeza de $1 mais antigos que $2 minutos
        if [ $2 -le 90 ]
        then
                echo Nao é possivel apagar arquivos mais antigos que $2 minutos
                exit 1
        else
                df -Pk $1 2>/dev/null| \
                grep ^\/ | \
                while read filesystem total usado disponivel porcentagem mountpoint
                do
                        if [ $disponivel -lt $3 ]
                        then
                                find $1 -type f -mmin +$2 -exec rm -fr {} \;
                                #sleep 0.005
                                LIMPEZA $1 $(expr $2 - 30) $3
                        else
                                echo $(date +"%Y-%m-%d_%H-%M_%S")\;Nada para fazer, espaço livre em disco maior que $(expr $3 \/ 1024)MB
                        fi
                done
        fi
}
function PROCESS() {
        PID=$(cat $PIDFILE)
        ps -p $PID 2> /dev/null > /dev/null
        RETURN=$?
        if [ $RETURN -eq 0 ]
        then
                RETURN=$(ps -p $PID 2> /dev/null| awk '{print $4}' | grep $(echo ^$0 | tr '\/' '\n' | tail -n 1) | wc -l )
                if [ $RETURN -eq 1 ]
                then
                        echo Parei por aqui.
                        echo Outra copia da rotina esta em execucao no momento
                        exit 1
                else
                        echo $$ > $PIDFILE
                fi
        else
                echo $$ > $PIDFILE
        fi
}
PROCESS
LIMPEZA /backup/archive 129600 5000000