bash脚本,流量监控 Plus
TIME 2023-06-19 20:28
创建名为“流量监控”的 bash 脚本
vi 流量监控.sh
粘贴以下内容
#!/bin/bash # 初始化累计出站和入站数据为0 total_out_bytes=0 total_in_bytes=0 monthly_out_bytes=0 monthly_in_bytes=0 # 获取初始日期 previous_month=$(date "+%m") while true; do # 获取当前时间、出网流量和入网流量 date=$(date "+%Y-%m-%d") month=$(date "+%m") day_of_week=$(date "+%u") case $day_of_week in "1") day_of_week="周一" ;; "2") day_of_week="周二" ;; "3") day_of_week="周三" ;; "4") day_of_week="周四" ;; "5") day_of_week="周五" ;; "6") day_of_week="周六" ;; "7") day_of_week="周日" ;; esac system_time=$(date "+%H:%M:%S") # 获取CPU和内存使用情况 cpu_usage=$(ps aux | awk 'BEGIN {sum=0} {sum+=$3}; END {printf("%.0f", sum)}') memory_usage=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}') out_bytes=$(cat /sys/class/net/eth0/statistics/tx_bytes) in_bytes=$(cat /sys/class/net/eth0/statistics/rx_bytes) # 等待1秒钟,并获取新的出网流量和入网流量 sleep 1 out_bytes_new=$(cat /sys/class/net/eth0/statistics/tx_bytes) in_bytes_new=$(cat /sys/class/net/eth0/statistics/rx_bytes) # 计算出网速度,单位为M out_speed=$(echo "scale=3; ($out_bytes_new - $out_bytes) / 1000000" | bc) if (( $(echo "$out_speed < 1" | bc -l) )); then out_speed=$(printf '%.3f' $out_speed) fi # 计算入网速度,单位为M in_speed=$(echo "scale=3; ($in_bytes_new - $in_bytes) / 1000000" | bc) if (( $(echo "$in_speed < 1" | bc -l) )); then in_speed=$(printf '%.3f' $in_speed) fi # 累加出站和入站数据 total_out_bytes=$(echo "$total_out_bytes + $out_bytes_new - $out_bytes" | bc) total_in_bytes=$(echo "$total_in_bytes + $in_bytes_new - $in_bytes" | bc) total_out_MB=$(echo "scale=3; $total_out_bytes / 1000000" | bc) total_in_MB=$(echo "scale=3; $total_in_bytes / 1000000" | bc) if (( $(echo "$total_out_MB < 1" | bc -l) )); then total_out_MB=$(printf '%.3f' $total_out_MB) fi if (( $(echo "$total_in_MB < 1" | bc -l) )); then total_in_MB=$(printf '%.3f' $total_in_MB) fi # 如果月份变更,则重置月度流量 if [ "$month" != "$previous_month" ]; then monthly_out_bytes=0 monthly_in_bytes=0 previous_month=$month fi # 累加月度出站和入站数据 monthly_out_bytes=$(echo "$monthly_out_bytes + $out_bytes_new - $out_bytes" | bc) monthly_in_bytes=$(echo "$monthly_in_bytes + $in_bytes_new - $in_bytes" | bc) monthly_out_MB=$(echo "scale=3; $monthly_out_bytes / 1000000" | bc) monthly_in_MB=$(echo "scale=3; $monthly_in_bytes / 1000000" | bc) if (( $(echo "$monthly_out_MB < 1" | bc -l) )); then monthly_out_MB=$(printf '%.3f' $monthly_out_MB) fi if (( $(echo "$monthly_in_MB < 1" | bc -l) )); then monthly_in_MB=$(printf '%.3f' $monthly_in_MB) fi # 输出结果 echo "$date $day_of_week $system_time CPU$cpu_usage% 内存$memory_usage% 出站${out_speed}M/s 进站${in_speed}M/s 今日出站${total_out_MB}M 进站${total_in_MB}M 本月出站${monthly_out_MB}M 进站${monthly_in_MB}M" # 保存到日志文件 echo "$date $day_of_week $system_time CPU$cpu_usage% 内存$memory_usage% 出站${out_speed}M/s 进站${in_speed}M/s 今日出站${total_out_MB}M 进站${total_in_MB}M 本月出站${monthly_out_MB}M 进站${monthly_in_MB}M" >> ./net_usage.log done
上面这个脚本依赖于 bc 二进制计算器
安装命令
安装命令
apt install -y bc
赋予流量监控脚本“流量监控.sh”可执行权限
chmod +x 流量监控.sh
用 Screen 创建一个名为“流量监控”离线任务
screen -S 流量监控
运行流量监控脚本“流量监控.sh”
./流量监控.sh
返回输出以下结果,每秒钟刷新一次
2023-06-19 周一 20:45:05 CPU1% 内存19% 出站0.002M/s 进站0.001M/s 今日出站0.258M 进站0.157M 本月出站0.258M 进站0.157M 2023-06-19 周一 20:45:06 CPU6% 内存19% 出站0.002M/s 进站0.001M/s 今日出站0.261M 进站0.158M 本月出站0.261M 进站0.158M 2023-06-19 周一 20:45:07 CPU102% 内存19% 出站0.001M/s 进站0.001M/s 今日出站0.262M 进站0.159M 本月出站0.262M 进站0.159M 2023-06-19 周一 20:45:08 CPU23% 内存19% 出站0.002M/s 进站0.001M/s 今日出站0.264M 进站0.160M 本月出站0.264M 进站0.160M
这个脚本有个小bug,那就是CPU项不能数值对其,三位数对齐
#!/bin/bash # 初始化累计出站和入站数据为0 total_out_bytes=0 total_in_bytes=0 monthly_out_bytes=0 monthly_in_bytes=0 # 获取初始日期 previous_month=$(date "+%m") while true; do # 获取当前时间、出网流量和入网流量 date=$(date "+%Y-%m-%d") month=$(date "+%m") day_of_week=$(date "+%u") case $day_of_week in "1") day_of_week="周一" ;; "2") day_of_week="周二" ;; "3") day_of_week="周三" ;; "4") day_of_week="周四" ;; "5") day_of_week="周五" ;; "6") day_of_week="周六" ;; "7") day_of_week="周日" ;; esac system_time=$(date "+%H:%M:%S") # 获取CPU和内存使用情况 cpu_usage=$(ps aux | awk 'BEGIN {sum=0} {sum+=$3}; END {printf("%03d", sum)}') memory_usage=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}') out_bytes=$(cat /sys/class/net/eth0/statistics/tx_bytes) in_bytes=$(cat /sys/class/net/eth0/statistics/rx_bytes) # 等待1秒钟,并获取新的出网流量和入网流量 sleep 1 out_bytes_new=$(cat /sys/class/net/eth0/statistics/tx_bytes) in_bytes_new=$(cat /sys/class/net/eth0/statistics/rx_bytes) # 计算出网速度,单位为M out_speed=$(echo "scale=3; ($out_bytes_new - $out_bytes) / 1000000" | bc) if (( $(echo "$out_speed < 1" | bc -l) )); then out_speed=$(printf '%.3f' $out_speed) fi # 计算入网速度,单位为M in_speed=$(echo "scale=3; ($in_bytes_new - $in_bytes) / 1000000" | bc) if (( $(echo "$in_speed < 1" | bc -l) )); then in_speed=$(printf '%.3f' $in_speed) fi # 累加出站和入站数据 total_out_bytes=$(echo "$total_out_bytes + $out_bytes_new - $out_bytes" | bc) total_in_bytes=$(echo "$total_in_bytes + $in_bytes_new - $in_bytes" | bc) total_out_MB=$(echo "scale=3; $total_out_bytes / 1000000" | bc) total_in_MB=$(echo "scale=3; $total_in_bytes / 1000000" | bc) if (( $(echo "$total_out_MB < 1" | bc -l) )); then total_out_MB=$(printf '%.3f' $total_out_MB) fi if (( $(echo "$total_in_MB < 1" | bc -l) )); then total_in_MB=$(printf '%.3f' $total_in_MB) fi # 如果月份变更,则重置月度流量 if [ "$month" != "$previous_month" ]; then monthly_out_bytes=0 monthly_in_bytes=0 previous_month=$month fi # 累加月度出站和入站数据 monthly_out_bytes=$(echo "$monthly_out_bytes + $out_bytes_new - $out_bytes" | bc) monthly_in_bytes=$(echo "$monthly_in_bytes + $in_bytes_new - $in_bytes" | bc) monthly_out_MB=$(echo "scale=3; $monthly_out_bytes / 1000000" | bc) monthly_in_MB=$(echo "scale=3; $monthly_in_bytes / 1000000" | bc) if (( $(echo "$monthly_out_MB < 1" | bc -l) )); then monthly_out_MB=$(printf '%.3f' $monthly_out_MB) fi if (( $(echo "$monthly_in_MB < 1" | bc -l) )); then monthly_in_MB=$(printf '%.3f' $monthly_in_MB) fi # 输出结果 echo "$date $day_of_week $system_time CPU${cpu_usage}% 内存$memory_usage% 出站${out_speed}M/s 进站${in_speed}M/s 今日出站${total_out_MB}M 进站${total_in_MB}M 本月出站${monthly_out_MB}M 进站${monthly_in_MB}M" # 保存到日志文件 echo "$date $day_of_week $system_time CPU${cpu_usage}% 内存$memory_usage% 出站${out_speed}M/s 进站${in_speed}M/s 今日出站${total_out_MB}M 进站${total_in_MB}M 本月出站${monthly_out_MB}M 进站${monthly_in_MB}M" >> ./net_usage.log done
运行效果
2023-06-19 周一 21:56:55 CPU000% 内存44% 出站0.001M/s 进站0.001M/s 今日出站0.119M 进站0.074M 本月出站0.119M 进站0.074M 2023-06-19 周一 21:56:56 CPU000% 内存44% 出站0.002M/s 进站0.001M/s 今日出站0.121M 进站0.076M 本月出站0.121M 进站0.076M 2023-06-19 周一 21:56:57 CPU000% 内存44% 出站0.002M/s 进站0.001M/s 今日出站0.123M 进站0.077M 本月出站0.123M 进站0.077M
后面再把磁盘IO给添加上去
点击数:16