Skip to content

Releases

v0.1.1 — 修复流量 32 位溢出,新增日志轮转,修复卡片布局

Choose a tag to compare

@dellzou dellzou released this 27 Sep 11:16

v0.1.1 — 修掉 32 位溢出导致的流量显示 0,并补上日志轮转

这次修的是什么

日报把上下行流量显示成 0 B,但采集数据是好的。根因是 busybox awk 的 %d 只支持 32 位有符号整数(上限 2,147,483,647 ≈ 2.1 GB)。

一次 4 小时满速下载在 2000M 宽带上约 2.5 TB,printf "%d" 会把它截断成 -2147483648,脚本里的"负数保护"再把它归零。

awk 的数值本身是 IEEE754 双精度,能精确到 2^53 ≈ 9 PB —— 问题只在输出格式,改用 %.0f 即无损。

环节 值
实际流量 2,496,773,389,155 字节(≈2.27 TB)
32 位有符号上限 2,147,483,647(≈2.1 GB)
printf "%d" 输出 -2147483648
负数保护后 归零 → 日报显示 0 B

改动清单

  • 修复 router-daily-report:流量累加/输出 %d → %.0f;合计改用 awk 浮点相加(shell 的 $(( )) 在 32 位 busybox 上同样是整数运算,也会溢出)
  • 新增 scripts/router-logarchive:messages 真轮转(copytruncate + gzip + 30 天清理)
    • iStoreOS 的 log_size 只管内存环形缓冲,配置了 log_file 后日志持续追加且永不轮转
    • 必须用 copytruncate 而非 mv:logd 持有原文件 fd,mv 后新文件收不到任何日志
  • 新增 router-metrics:新增 disk_pct 列(CSV 7 → 8 列,旧行自动兼容)
  • 新增 日报:数据盘占用格、DNS 防护拦截统计;磁盘 ≥85% 触发告警
  • 优化 异常白名单扩充:nmbd 选举噪音 / AGH dnsproxy upstream / uhttpd Broken pipe
  • 修复 日报卡片「数据盘占用」被挤成竖排:.card 原写死 width:33%(按 3 格设计),
    加了第 4 格后总宽 132% 被压缩。改为不写死宽度按列均分,标签加 white-space:nowrap
  • 文档 README 新增 §3.1「流量为什么会显示 0」与 §11「关于轻量」(内存/磁盘占用实测)

实测

[iStoreOS 软路由] 2026-09-27 日报
流量: 下行 2.27 TB / 上行 46.89 GB / 需关注异常 9 条 / 覆盖率 86%

指标 实测
单次采集耗时 ~0.02 s
单次日志轮转耗时 ~1.00 s
连续 30 次采集内存增量 +3.4 MB(页缓存,非泄漏),无累积
日志轮转后稳态占用 < 50 MB

三个脚本均为一次性执行、跑完即退,无常驻进程;只依赖 busybox 自带的 awk/sed/grep/df,不引入任何运行时。

安装

# 电脑上(Git Bash)
sh deploy.sh --check     # 只做语法检查,不碰路由器
sh deploy.sh --install   # 上传并安装
不装 WebUI 也能用:只部署 scripts/ 下三个脚本 + 一份 /etc/msmtprc,就是一个完整的邮件日报系统。
完整说明见 README。