Desligamento automático se não houver tráfego de rede 'real' para um 'homeserver'

0

Olá, acabei de instalar meu homeserver usando o seguinte:

  • TvHeadend
  • PyLoad
  • NzbGet
  • Samba

Eu planejo desligar se o up / downstream desses serviços for menor que 1 Mb / s (Bandwith) ou se o tráfego nos últimos 10 minutos estiver abaixo de 100mb.

Então, minhas perguntas são se existem ferramentas para monitorar facilmente o tráfego e passar e depois deixá-lo simplesmente ler com um script que eu configurei para ser chamado regularmente (a cada 10 minutos ou mais com o cronjob) e então simplesmente verificar se o uso é muito baixo e desligado neste caso.

Estou usando o Archlinux se isso for importante.

    
por BubbaLebba 01.08.2015 / 21:11

1 resposta

1

Eu precisava de um script para fazer isso, então escrevi isto:

#!/bin/bash -e
#
# Wait until there's less than -t of traffic in an interval of -i seconds.
#

fmt() {
    numfmt --to=si --suffix=B $1
}

while getopts "i:m:" opt; do
    case $opt in
        i)
            interval=$OPTARG
            ;;
        t)
            minimum2=$(numfmt --from=si $OPTARG)
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            exit 1
            ;;
    esac
done
shift $((OPTIND-1))

bytes=$(< /sys/class/net/eth1/statistics/rx_bytes )

minimum=-1

sleep $interval

while [[ $(( $(< /sys/class/net/eth1/statistics/rx_bytes ) - $bytes )) -gt $minimum ]]; do
    minimum=$minimum2
    rate=$(( $(< /sys/class/net/eth1/statistics/rx_bytes ) - $bytes ))
    echo $(date +%Y%m%d-%H%M%S)': received' $(fmt $rate) '('$(fmt $(( $rate / $interval )))'/s)'
    bytes=$(< /sys/class/net/eth1/statistics/rx_bytes )
    sleep $interval
done

echo "End: received" $(fmt $(( $(< /sys/class/net/eth1/statistics/rx_bytes ) - $bytes ))) '('$(fmt $(( $rate / $interval )))'/s)'

Em seguida, use-o como until-low-traffic -i 60 -m 1M && shutdown -h 1 ou o que for.

(Pode ser muito mais simples, se você corrigir os parâmetros e não formatar a saída.)

    
por 05.01.2016 / 22:30