Здравствуйте, я только что установил свой домашний сервер, я использую следующее:

  • TvHeadend
  • PyLoad
  • NZBGet
  • самба

Я планирую завершить работу, если восходящий / нисходящий поток этих служб составляет менее 1 Мбит / с (пропускная способность) или трафик за последние 10 минут был ниже 100 МБ.

Поэтому у меня есть вопросы, есть ли какие-нибудь инструменты, чтобы легко отслеживать трафик и проходить, а затем позвольте мне просто прочитать его с помощью сценария, который я установил, чтобы он вызывался регулярно (каждые 10 минут или около того с помощью cronjob), а затем просто проверить, является ли использование слишком низкое и отключение в этом случае.

Я использую Archlinux, если это имеет значение.

1 ответ1

1

Мне нужен был скрипт для этого, поэтому я написал это:

#!/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)'

Затем используйте его, как until-low-traffic -i 60 -m 1M && shutdown -h 1 или что-то еще.

(Это можно сделать намного проще, если вы исправите параметры и не отформатируете вывод.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .