note/tech/traffic.sh
2025-11-19 10:16:05 +08:00

61 lines
2.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# hour_traffic.sh
#!/bin/bash
##### 记录每小时的流量 #####
# crontab 每小时执行
# 0 * * * * /bin/bash hour_traffic.sh 2>&1 >> err.log
# 定义日志文件和临时存储文件
TMP_HOUR="$HOME/traffic/.tmp_hour"
HOUR_LOG_FILE="$HOME/traffic/hour_traffic.log"
# 获取当前的 RX 和 TX 流量(以字节为单位)
INTERFACE="ens3" # 替换为你需要监控的网络接口
RX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)
TOTAL_BYTES=$((RX_BYTES + TX_BYTES))
# 判断.tmp_hour是否存在 或 是否为0
if [ ! -f "$TMP_HOUR" ] || [ "$(cat $TMP_HOUR)" -eq 0 ]; then
# 如果不存在或为0则获取当前流量并写入.tmp_hour文件
echo $TOTAL_BYTES > $TMP_HOUR
echo "$(date +%Y%m%d%H) 0" >> $HOUR_LOG_FILE
else
# 如果.tmp_hour存在且不为0则获取.tmp_hour文件中的流量计算差值更新.tmp_hour文件差值写入log文件
HOUR_BYTES=$(cat $TMP_HOUR)
HOUR_DIFF=$((TOTAL_BYTES - HOUR_BYTES))
echo $TOTAL_BYTES > $TMP_HOUR
echo "$(date +%Y%m%d%H) $HOUR_DIFF" >> $HOUR_LOG_FILE
fi
##############################################
# day_traffic.sh
##### 记录每天的流量 #####
# crontab 每天凌晨0点执行,在执行完hour_traffic.sh后执行
# 1 0 * * * /bin/bash day_traffic.sh 2>&1 >> err.log
#!/bin/bash
# 定义日志文件和临时存储文件
DAY_LOG_FILE="$HOME/traffic/day_traffic.log"
TMP_HOUR="$HOME/traffic/.tmp_hour"
HOUR_LOG_FILE="$HOME/traffic/hour_traffic.log"
# 重置临时存储文件
echo 0 > $TMP_HOUR
# 累计HOUR_LOG_FILE中的流量
TOTAL_BYTES=$(awk '{sum+=$2} END {print sum}' $HOUR_LOG_FILE)
# 写入log文件
echo "$(date -d 'yesterday' +%Y%m%d) $TOTAL_BYTES" >> $DAY_LOG_FILE
# 归档HOUR_LOG_FILE
mv $HOUR_LOG_FILE $HOME/traffic/archive/hour_traffic_$(date -d "yesterday" +%Y%m%d).log
##################################################
# month_traffic.sh
##### 统计每月的流量 #####
# crontab 每月x日凌晨0点x执行,在执行完day_traffic.sh后执行
# 8 0 6 * * /bin/bash month_traffic.sh 2>&1 >> err.log
#!/bin/bash
MONTH_LOG_FILE="$HOME/traffic/month_traffic.log"
DAY_LOG_FILE="$HOME/traffic/day_traffic.log"
# 统计DAY_LOG_FILE
TOTAL_BYTES=$(awk '{sum+=$2} END {print sum}' $DAY_LOG_FILE)
# 写入log文件
echo "$(date +%Y%m%d) $TOTAL_BYTES" >> $MONTH_LOG_FILE
# 归档DAY_LOG_FILE
mv $DAY_LOG_FILE $HOME/traffic/archive/day_traffic_$(date +%Y%m).log