Excluindo arquivos mais antigos para liberar espaço conforme necessário no Linux

2

Eu tenho um cron job que grava logs em /tmp . Desejo excluir automaticamente os arquivos mais antigos quando o espaço livre no disco se tornar inferior a 1 GB.

Estou tentando fazer df -ah /tmp e, em seguida, pegue a segunda linha, use cut para obter a coluna avail . Em seguida, em um loop for , continue excluindo os arquivos com mais de n dias com -mtime até que haja espaço livre suficiente.

Eu provavelmente quero configurá-lo como um cron job que é executado diariamente também.

    
por yasith 22.09.2015 / 17:26

1 resposta

1

Em vez de um find -mtime, faça um ls -t, por exemplo:

DIR=/tmp
FREESPACE=1000000
find $DIR -type f | xargs ls -1rt | while read f ; do
  if [ 'df --output=avail $DIR | tail -1' -ge $FREESPACE ] ; then
    break
  fi
  # rm -f $f
done

Descomente o rm -f $f para que ele funcione ...

No entanto, eu costumava fazer as coisas de forma um pouco diferente. Eu colocaria meus logs cron em / var / log e deixaria algo como logrotate manipular o espaço em disco. Ou, como outra alternativa, colocaria os logs em um subdiretório separado, como / tmp / mycronjob / *, e manteria um número fixo de dias de arquivos de log. Não é tão flexível quanto monitorar o espaço em disco, mas também é um passo a passo em diante find /tmp/mycronjob -mtime +30 -exec rm {} \; e mais previsível.

    
por 21.11.2015 / 18:33