Crie um script para verificar o tamanho do diretório

2

Eu tenho um problema com meu framboesa, meu cartão SD tem apenas 16gb de espaço, então depois de algum tempo o log dentro de / var / log usa todo o espaço no sd e eu não consigo fazer quase nada com meu framboesa, então Eu tento criar um script para verificar dimensão de diretório / var / log todos os dias e enviar-me um email com esses dados, para que eu possa excluir alguns logs quando o espaço usado é muito, mas eu tenho algum problema com o comando du -h / var / log porque o script não o executa, qualquer um pode me ajudar?

este é o scritp

#!/bin/bash

folder=/var/log

folder_size="du -h /var/log"

maxsize=10000000

emailAddr="[email protected]"

while true; do

  if [ $folder_size -ge $maxsize ]; then
    echo size is over $maxsize kilobytes

    subject="DIMENSIONE DELLA CARTELLA $folder HA SUPERATO IL LIMITE!"
    echo "La dimensione della cartella $folder ha superato il limite di $maxsize" | mail -s "$subject" $emailAddr

    exit
  else
    echo size is under $maxsize kilobytes

    subject="dimensione della cartella $folder"
    echo "La dimensione della cartella $folder è di $folder_size - $maxsize" | mail -s "$subject" $emailAddr 

  fi

  sleep 86400 # in seconds = 1 day
done

meu os é raspbyan

    
por Ivan Notarstefano 29.11.2016 / 21:14

2 respostas

2

du -h /var/log (você precisa usar backticks, ou $ (xxx), não aspas duplas) vai retornar a saída como abaixo. Mas você quer determinar apenas o tamanho.

# du -h /var/log
2.6M    /var/log/httpd
4.0K    /var/log/ntpstats
14M     /var/log/sa
4.0K    /var/log/mail
26M     /var/log/audit
46M     /var/log
#

Considerando que, se você executar du -s /var/log , verá a saída como

# du -s /var/log
46256   /var/log
#

Então, canalizando em corte, você pode extrair o elemento numérico, como abaixo.

# du -s /var/log | cut -f1
46256
#

O que significa que a linha do seu script deve ser alterada de

folder_size="du -h /var/log"

para

folder_size='du -s /var/log | cut -f1'

Ou para usar uma sintaxe não obsoleta

folder_size=$(du -s /var/log | cut -f1)
    
por 29.11.2016 / 21:22
0

Eu entendo que você está pedindo ajuda com um script. Posso sugerir uma alternativa usando o Logrotate para assistir ao (s) registro (s) e girá-los com base no tamanho e na quantidade de registros girados que você mantém?

Algo parecido com isto:

/tmp/output.log {
    size 100M
    copytruncate
    create 700 root utmp
    rotate 4
    compress
}
    
por 29.11.2016 / 21:40