Limpeza
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