服务器配置流量用完时关机
发布日期:
作者: 西木
评论数:暂无评论
amazon lightsail, vultr, linode等等服务商的流量用完后并不会关机,超出计划数据传输限额的流量会继续扣费,每家的价格也不一样。如果你不想为意外超出流量付费,那么可以配置流量快用完时自动关机。
下面是配置的方法,仅适用于服务器操作系统是Debian系的Linux发行版。
安装vnstat和bc
sudo apt update
sudo apt install vnstat bc
必须安装bc(基础计算器),因为bash无法直接处理浮点数比较。
查看状态:
sudo systemctl status vnstat
如果没启动:
sudo systemctl enable vnstat
sudo systemctl start vnstat
创建脚本文件:
sudo vi /home/admin/traffic_watch.sh
#!/bin/bash
# 1. 设置阈值:比如 950GB (假如月流量是1TB,留 50G 余量。)
LIMIT_GB=950
# 2. 获取本月总流量 (字节单位)
# --oneline 模式下:第11列是本月总流量(字节)
# 我们强制使用 -b (bytes) 参数确保输出的是纯数字字节
USAGE_BYTES=$(vnstat --oneline b | cut -d';' -f11)
# 3. 计算当前的 GB 数 (使用 bc 处理浮点数)
# 1024^3 = 1073741824
USAGE_GB=$(echo "scale=2; $USAGE_BYTES / 1073741824" | bc)
# 4. 比较并执行关机
# bc 返回 1 表示为真
if [ "$(echo "$USAGE_GB > $LIMIT_GB" | bc)" -eq 1 ]; then
echo "流量已超标: $USAGE_GB GB,系统正在关机..."
# 记录到系统日志,方便日后查看
logger "Traffic limit exceeded ($USAGE_GB GB). Shutting down."
/sbin/shutdown -h now
fi
流量阈值根据自己的月度数据传输配额来设置。如果是amazon lightsail, 数据传输限额范围内,出入站流量都会计算进去,所以获取的是vnstat –online的第11列,使用了 -f11 ,如果你的服务器厂家只计算出站数据,则 -f11 改成 -f10
赋予脚本执行权限
sudo chmod +x /home/admin/traffic_watch.sh
添加到定时任务
安装cron(一般自带了,如果没有自带,需要安装)
sudo apt install cron
让它每5分钟自动检查一次
sudo crontab -e
添加
*/5 * * * * /bin/bash /home/admin/traffic_watch.sh
查看自动关机日志:
sudo journalctl | grep "Traffic limit exceeded"
查看接口
vnstat --iflist
查看流量
将enp1s0替换成自己的网卡。
vnstat -i enp1s0
或:
vnstat -d
vnstat -m