嘟嘟社区

哪个大神再把这脚本改一改,不准,请去掉流入流量,


本帖最后由 调查员 于 2024-9-9 17:10 编辑

代码是坛友发的,检测流量自动关机。。。
我改了几个地方的。
适合在alpine运行

关机我改成 poweroff
后来怕启动不了,
改成 rc-service docker stop
(这个命令只适合在alpine)

但是流量不准,我查询阿里云后台的流量,比脚本测的流量要小很多。估计阿里云是没有计算流入,而脚本计算了。
请大神去掉流入,
我尝试去掉几个 "in" 参数,结果失败。

  1. #!/bin/bash
  2. # 获取当前脚本的绝对路径
  3. SCRIPT_PATH=$(realpath "$0")
  4. # 保存流量数据的目录和文件
  5. TRAFFIC_DIR="/root/network_traffic"
  6. TRAFFIC_FILE="$TRAFFIC_DIR/network_traffic.dat"
  7. LOG_FILE="$TRAFFIC_DIR/network_traffic_monitor.log"
  8. CURRENT_MONTH=$(date +"%Y-%m")
  9. SHUTDOWN_THRESHOLD=$((19 * 1024 * 1024 * 1024 + 512 * 1024 * 1024))  # 9.5GB 转换为字节的整数表示
  10. # 要监控的网络接口
  11. INTERFACE="eth0"
  12. # 创建保存流量数据的目录
  13. if [ ! -d "$TRAFFIC_DIR" ]; then
  14.     mkdir -p "$TRAFFIC_DIR"
  15.     if [ $? -eq 0 ]; then
  16.         echo "目录 $TRAFFIC_DIR 创建成功"
  17.     else
  18.         echo "无法创建目录 $TRAFFIC_DIR"
  19.         exit 1
  20.     fi
  21. fi
  22. # 定义日志记录函数
  23. log_message() {
  24.     local message="$1"
  25.     echo "$(date +"%Y-%m-%d %H:%M:%S") – $message" >> $LOG_FILE
  26. }
  27. # 初始化日志文件
  28. if [ ! -f $LOG_FILE ]; then
  29.     touch $LOG_FILE
  30.     log_message "日志文件创建成功"
  31. fi
  32. # 如果流量文件不存在或者月份不同,则创建并初始化
  33. if [ ! -f $TRAFFIC_FILE ]; then
  34.     echo "$CURRENT_MONTH 0 0 0" > $TRAFFIC_FILE
  35.     log_message "流量文件创建成功"
  36. else
  37.     saved_month=$(awk ‘{print $1}’ $TRAFFIC_FILE)
  38.     if [ "$saved_month" != "$CURRENT_MONTH" ]; then
  39.         echo "$CURRENT_MONTH 0 0 0" > $TRAFFIC_FILE
  40.         log_message "流量文件月份更新"
  41.     fi
  42. fi
  43. # 读取之前的流量记录
  44. read saved_month last_total_in last_total_out last_check_in last_check_out < $TRAFFIC_FILE
  45. # 获取当前接收和发送的字节数
  46. if ! in_bytes=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes); then
  47.     log_message "无法读取接收字节数"
  48.     exit 1
  49. fi
  50. if ! out_bytes=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes); then
  51.     log_message "无法读取发送字节数"
  52.     exit 1
  53. fi
  54. # 如果上次检查值大于当前值,说明流量可能已被重置
  55. if [ "$in_bytes" -lt "$last_check_in" ] || [ "$out_bytes" -lt "$last_check_out" ]; then
  56.     log_message "检测到网卡流量重置,恢复累积流量"
  57.     last_check_in=0
  58.     last_check_out=0
  59. fi
  60. # 计算增量流量
  61. delta_in=$((in_bytes – last_check_in))
  62. delta_out=$((out_bytes – last_check_out))
  63. # 计算启动前后的累计流量
  64. total_in=$((last_total_in + delta_in))
  65. total_out=$((last_total_out + delta_out))
  66. total_bytes=$((total_in + total_out))
  67. # 检查是否达到19.5GB的阈值
  68. if [ "$total_bytes" -ge "$SHUTDOWN_THRESHOLD" ]; then
  69.     log_message "总流量已达到 19.5GB,关闭docker,关闭定时任务"
  70.     rc-service docker stop
  71.     service cornd stop
  72. fi
  73. # 自适应单位输出
  74. if [ $total_bytes -lt 1024 ]; then
  75.     total="$total_bytes bytes"
  76. elif [ $total_bytes -lt $((1024 * 1024)) ]; then
  77.     total=$(echo "scale=2; $total_bytes / 1024" | bc)
  78.     total="$total KB"
  79. elif [ $total_bytes -lt $((1024 * 1024 * 1024)) ]; then
  80.     total=$(echo "scale=2; $total_bytes / 1024 / 1024" | bc)
  81.     total="$total MB"
  82. else
  83.     total=$(echo "scale=2; $total_bytes / 1024 / 1024 / 1024" | bc)
  84.     total="$total GB"
  85. fi
  86. # 输出结果
  87. log_message "$total"
  88. echo "$(date +%R) This Month: $total"
  89. echo "——————————"
  90. # 将当前流量值保存到文件
  91. echo "$CURRENT_MONTH $total_in $total_out $in_bytes $out_bytes" > $TRAFFIC_FILE

复制代码

这点小需求,找gpt啊
的确GPT就能搞定了
这些需求,chatgpt去做真的不在话下
你们个个都说容易,
那帮我在GPT弄一下吧,我不怎么会操作
弄好了,把代码贴上来,谢谢!
阿里云的api有没有查询流量的,有的话还是api比较好
它们什么都知道,它们本就是故意的
我什么也做不了
问过gpt了吗?
cdt是按照每个小时最大的出入流量算的

调查员 发表于 2024-9-9 17:22
你们个个都说容易,
那帮我在GPT弄一下吧,我不怎么会操作
弄好了,把代码贴上来,谢谢! …

这是把坛友当gpt使唤了

heihai 发表于 2024-9-9 17:26
阿里云的api有没有查询流量的,有的话还是api比较好

似乎没有cdt的,我找过没找到