Limpeza

De Wiki Clusterlab.com.br
Revisão de 12h31min de 14 de dezembro de 2017 por Damato (discussão | contribs)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

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