# 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