netcup服务器限速脚本编写

森岩
2024-11-30 / 0 评论 / 3 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月30日,已超过371天没有更新,若内容或图片失效,请留言反馈。

netcup的vps服务器现在的限速策略是:过去24小时总流量(上+下)超过2T,则限速为200M。
第一个想法就是,检测过去23小时,根据过去23小时的总流量数,限制接下来一小时的流量数。
以下是gpt的回答:
要在Debian系统中实现这个需求,可以通过以下步骤来设置一个定时任务,每小时统计过去23小时的流量,并根据统计结果调整限速,确保未来一小时的总流量不超过1.8TB。

步骤 1: 安装必要的工具

首先,确保安装了vnstat来监控流量,以及tc来进行流量控制。可以使用以下命令安装:

sudo apt update
sudo apt install vnstat iproute2

步骤 2: 配置vnstat

vnstat会自动开始监控网络流量。你可以使用以下命令查看流量统计:

vnstat -h

步骤 3: 编写流量统计和限速脚本

创建一个脚本来统计流量并设置限速。例如,创建一个名为bandwidth_control.sh的脚本:

#!/bin/bash

# 网络接口名称(例如 eth0)
INTERFACE="eth0"

# 获取过去23小时的流量(以字节为单位)
TRAFFIC=$(vnstat --json h | jq ".interfaces[0].traffic.hour[].tx + .interfaces[0].traffic.hour[].rx" | tail -n 23 | paste -sd+ | bc)

# 将流量转换为TB
TRAFFIC_TB=$(echo "scale=2; $TRAFFIC / (1024^4)" | bc)

# 检查流量是否超限(1.8TB)
LIMIT=1.8
if (( $(echo "$TRAFFIC_TB >= $LIMIT" | bc -l) )); then
  # 设置限速(例如,限制为100Mbps)
  tc qdisc add dev $INTERFACE root tbf rate 100mbit burst 32kbit latency 400ms
else
  # 移除限速
  tc qdisc del dev $INTERFACE root
fi

确保脚本具有可执行权限:

chmod +x bandwidth_control.sh

步骤 4: 设置定时任务

使用cron每小时运行这个脚本。编辑crontab

crontab -e

添加以下行以每小时执行一次脚本:

0 * * * * /path/to/bandwidth_control.sh

确保将/path/to/bandwidth_control.sh替换为实际脚本的路径。

注意事项

  1. 限速配置:调整脚本中的流量限制和限速参数(如rate)以适应你的具体需求。
  2. 网络接口:确保脚本中的INTERFACE变量设置为你的实际网络接口名称。
  3. 权限:确保脚本和cron任务有足够的权限来执行流量监控和限速操作。

通过这些步骤,你可以实现每小时统计流量并根据需要进行限速的功能。


新问题:该方法只能取得json最后若干行,如果已有行数少于需要取得的行数,就会导致数据出错。
询问GPT:
你可以通过以下步骤来获取 JSON 数据中的小时数,并根据具体情况进行处理,确保不会尝试读取超过实际存在的小时数。

首先,获取 JSON 数据中的小时数:

HOUR_COUNT=$(vnstat --json h | jq ".interfaces[0].traffic.hour | length")

这样可以获得 JSON 数据中实际的小时数。然后,你可以根据这个小时数来决定要读取多少行数据。确保只读取存在的行数,避免超出范围:

# 确定要读取的小时数,最多不超过23小时
READ_HOURS=$((HOUR_COUNT < 23 ? HOUR_COUNT : 23))

# 计算流量
TRAFFIC=$(vnstat --json h | jq ".interfaces[0].traffic.hour[].tx + .interfaces[0].traffic.hour[].rx" | tail -n "$READ_HOURS" | paste -sd+ | bc)

这样,代码会根据实际的小时数决定要读取的行数,确保不会读取到错误的数据。

0

评论

博主关闭了所有页面的评论