如果“家庭服务器”没有“实际”网络流量,则自动关闭

如果“家庭服务器”没有“实际”网络流量,则自动关闭

您好,我刚刚安装了我的家庭服务器,我正在使用以下内容:

  • 电视头端
  • 加载
  • 閱讀
  • 桑巴

如果这些服务的上行/下行速度低于 1 Mb/s(带宽)或过去 10 分钟的流量低于 100mb,我计划关闭。

所以我的问题是是否有任何工具可以轻松监控流量并通过,然后让我简单地用我设置的脚本读取并定期调用(每 10 分钟左右使用 cronjob),然后简单检查使用率是否太低并在这种情况下关闭。

如果有必要的话我会使用 Archlinux。

答案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

(如果您修复参数并且不格式化输出,它会变得简单得多。)

相关内容