·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

阿里云alpine系统,检测流量达标则关机脚本

105 5

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
此脚本是之前坛友发的,
我稍加修改,
使流量检测更准。
(之前的非常不准,我这个脚本,经过我多天检测,跟阿里云后台的流量变动几乎一致)

添加了五分钟后关机的命令。(怕开机后死循环)


建议定时任务,设为10分钟运行一次。
*/10    *       *       *       *       ash /root/aliyun_traffic.sh >/dev/null
(alpine系统,是用ash代替bash)


  1. #!/bin/bash# 获取当前脚本的绝对路径SCRIPT_PATH=$(realpath "$0")# 保存流量数据的目录和文件TRAFFIC_DIR="/root/network_traffic"TRAFFIC_FILE="$TRAFFIC_DIR/network_traffic.dat"LOG_FILE="$TRAFFIC_DIR/network_traffic_monitor.log"CURRENT_MONTH=$(date +"%Y-%m")SHUTDOWN_THRESHOLD=$((19 * 1024 * 1024 * 1024))  # 19GB 转换为字节的整数表示# 要监控的网络接口INTERFACE="eth0"# 创建保存流量数据的目录if [ ! -d "$TRAFFIC_DIR" ]; then    mkdir -p "$TRAFFIC_DIR"    if [ $? -eq 0 ]; then        echo "目录 $TRAFFIC_DIR 创建成功"    else        echo "无法创建目录 $TRAFFIC_DIR"        exit 1    fifi# 定义日志记录函数log_message() {    local message="$1"    echo "$(date +"%Y-%m-%d %H:%M:%S") - $message" >> $LOG_FILE}# 初始化日志文件if [ ! -f $LOG_FILE ]; then    touch $LOG_FILE    log_message "日志文件创建成功"fi# 如果流量文件不存在或者月份不同,则创建并初始化if [ ! -f $TRAFFIC_FILE ]; then    echo "$CURRENT_MONTH 0 0" > $TRAFFIC_FILE    log_message "流量文件创建成功"else    saved_month=$(awk '{print $1}' $TRAFFIC_FILE)    if [ "$saved_month" != "$CURRENT_MONTH" ]; then        echo "$CURRENT_MONTH 0 0" > $TRAFFIC_FILE# 月初先删除日志,再重建日志文件        rm $LOG_FILE        touch $LOG_FILE        log_message "流量文件月份更新"    fifi# 读取之前的流量记录read saved_month  last_total_out last_check_out < $TRAFFIC_FILE# 获取当前接收和发送的字节数if ! out_bytes=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes); then    log_message "无法读取发送字节数"    exit 1fi# 如果上次检查值大于当前值,说明流量可能已被重置if [ "$out_bytes" -lt "$last_check_out" ]; then    log_message "检测到网卡流量重置,恢复累积流量"    last_check_out=0fi# 计算增量流量delta_out=$((out_bytes - last_check_out))# 计算启动前后的累计流量total_out=$((last_total_out + delta_out))total_bytes=$((total_out))# 检查是否达到阈值if [ "$total_bytes" -ge "$SHUTDOWN_THRESHOLD" ]; then    log_message "总流量已达到19GB,五分钟后关机"    sleep 5m    powerofffi# 自适应单位输出if [ $total_bytes -lt 1024 ]; then    total="$total_bytes bytes"elif [ $total_bytes -lt $((1024 * 1024)) ]; then    total=$(echo "scale=2; $total_bytes / 1024" | bc)    total="$total KB"elif [ $total_bytes -lt $((1024 * 1024 * 1024)) ]; then    total=$(echo "scale=2; $total_bytes / 1024 / 1024" | bc)    total="$total MB"else    total=$(echo "scale=2; $total_bytes / 1024 / 1024 / 1024" | bc)    total="$total GB"fi# 输出结果log_message "$total"echo "$(date +%R) This Month: $total"echo "------------------------------"# 将当前流量值保存到文件echo "$CURRENT_MONTH $total_out $out_bytes" > $TRAFFIC_FILE
复制代码
我要说一句 收起回复
创宇盾启航版免费网站防御网站加速服务

评论5

CrystαlLv.8 发表于 2024-9-20 10:03:23 | 查看全部
牛逼
我要说一句 收起回复
婷姐Lv.8 发表于 2024-9-20 10:03:44 | 查看全部
牛鼻
我要说一句 收起回复
CrystαlLv.8 发表于 2024-9-20 10:04:39 | 查看全部
mark一下。不知道openwrt能用不
我要说一句 收起回复
拾光Lv.8 发表于 2024-9-20 10:05:21 | 查看全部
感谢楼主,补充debian的,
修改eth0和自己网卡一致,文件编码utf8,chmod +x 执行权限
  1. #!/bin/bash# 获取当前脚本的绝对路径SCRIPT_PATH=$(realpath "$0")# 保存流量数据的目录和文件TRAFFIC_DIR="/root/network_traffic"TRAFFIC_FILE="$TRAFFIC_DIR/network_traffic.dat"LOG_FILE="$TRAFFIC_DIR/network_traffic_monitor.log"CURRENT_MONTH=$(date +"%Y-%m")SHUTDOWN_THRESHOLD=$((19 * 1024 * 1024 * 1024))  # 19GB 转换为字节的整数表示# 要监控的网络接口INTERFACE="eth0"# 创建保存流量数据的目录if [ ! -d "$TRAFFIC_DIR" ]; then    mkdir -p "$TRAFFIC_DIR"    if [ $? -eq 0 ]; then        echo "目录 $TRAFFIC_DIR 创建成功"    else        echo "无法创建目录 $TRAFFIC_DIR"        exit 1    fifi# 定义日志记录函数log_message() {    local message="$1"    echo "$(date +"%Y-%m-%d %H:%M:%S") - $message" >> $LOG_FILE}# 初始化日志文件if [ ! -f $LOG_FILE ]; then    touch $LOG_FILE    log_message "日志文件创建成功"fi# 如果流量文件不存在或者月份不同,则创建并初始化if [ ! -f $TRAFFIC_FILE ]; then    echo "$CURRENT_MONTH 0 0" > $TRAFFIC_FILE    log_message "流量文件创建成功"else    saved_month=$(awk '{print $1}' $TRAFFIC_FILE)    if [ "$saved_month" != "$CURRENT_MONTH" ]; then        echo "$CURRENT_MONTH 0 0" > $TRAFFIC_FILE# 月初先删除日志,再重建日志文件        rm $LOG_FILE        touch $LOG_FILE        log_message "流量文件月份更新"    fifi# 读取之前的流量记录read saved_month  last_total_out last_check_out < $TRAFFIC_FILE# 获取当前接收和发送的字节数if ! out_bytes=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes); then    log_message "无法读取发送字节数"    exit 1fi# 如果上次检查值大于当前值,说明流量可能已被重置if [ "$out_bytes" -lt "$last_check_out" ]; then    log_message "检测到网卡流量重置,恢复累积流量"    last_check_out=0fi# 计算增量流量delta_out=$((out_bytes - last_check_out))# 计算启动前后的累计流量total_out=$((last_total_out + delta_out))total_bytes=$((total_out))# 检查是否达到阈值if [ "$total_bytes" -ge "$SHUTDOWN_THRESHOLD" ]; then    log_message "总流量已达到19GB,五分钟后关机"    sleep 5m    /sbin/poweroff  # 使用完整路径fi# 自适应单位输出if [ $total_bytes -lt 1024 ]; then    total="$total_bytes bytes"elif [ $total_bytes -lt $((1024 * 1024)) ]; then    total=$(echo "scale=2; $total_bytes / 1024" | bc)    total="$total KB"elif [ $total_bytes -lt $((1024 * 1024 * 1024)) ]; then    total=$(echo "scale=2; $total_bytes / 1024 / 1024" | bc)    total="$total MB"else    total=$(echo "scale=2; $total_bytes / 1024 / 1024 / 1024" | bc)    total="$total GB"fi# 输出结果log_message "$total"echo "$(date +%R) This Month: $total"echo "------------------------------"# 将当前流量值保存到文件echo "$CURRENT_MONTH $total_out $out_bytes" > $TRAFFIC_FILE
复制代码
脚本用到bc注意安装:
apt install bc cron
crontab -e
*/10 * * * * /bin/bash /root/network_traffic/cdt-shuntdown.sh >/dev/null
我要说一句 收起回复
拾光Lv.8 发表于 2024-9-20 10:05:56 | 查看全部
好帖子,都支持下
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.15.141.184,GMT+8, 2024-11-17 21:47 , Processed in 0.306897 second(s), 114 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表