- 新增 aio-mcp 项目框架 - 新增 .trae/skills/ OCR/SKU 设计工具 - 更新 auto-check 配置和 stress 包 - 删除 fnhelp 文档目录 - 更新 Docker 压力测试脚本
auto-check
自动化目标扫描 + SSH 登录 + 远程压力测试工具(支持 CIDR 和 IP 范围格式)。
基于 cobra 命令行框架。
功能
| 子命令 | 功能 | 包 |
|---|---|---|
run |
完整流程:发现 → SSH → 压测 | 全部 |
scan |
仅扫描目标,发现存活设备 | pkg/discovery |
stress |
对指定 IP 执行压力测试 | pkg/stress + pkg/sshclient |
安装
go build -o auto-check .
使用
# 查看帮助
./auto-check --help
# 仅扫描目标(CIDR 格式)
./auto-check scan --cidr 192.168.1.0/24
# 仅扫描目标(IP 范围格式)
./auto-check scan --cidr 192.168.1.1-192.168.1.100
# 对指定主机执行压力测试
./auto-check stress --ips 192.168.1.100,192.168.1.101 --user root --password secret --stress cpu,memory,disk
# 完整流程(扫描 → SSH → 压测)
./auto-check run --cidr 192.168.1.0/24 --user root --password secret --stress cpu,memory,disk
全局标志
| 标志 | 默认值 | 说明 |
|---|---|---|
--cidr |
192.168.1.0/24 |
目标网段或 IP 范围 (CIDR 或 起始IP-结束IP) |
--user |
root |
SSH 用户名 |
--password |
(空) | SSH 密码 |
--key |
(空) | SSH 私钥路径 |
--port |
22 |
SSH 端口 |
--timeout |
3s |
超时 |
--concurrency |
50 |
并发扫描数 |
--report |
(自动生成) | 报告输出路径 |
子命令标志
run / stress
| 标志 | 默认值 | 说明 |
|---|---|---|
--stress |
cpu,memory |
压测类型: cpu, memory, disk, memnative, fnstable, full |
--duration |
30s |
持续时间 |
--threads |
4 |
线程数 |
--ips |
(必填,仅stress) | 目标 IP (逗号分隔) |
压力测试类型
| 类型 | 工具 | 说明 |
|---|---|---|
cpu |
stress-ng | CPU 全方法压测 |
memory |
stress-ng | 内存压测 |
disk |
stress-ng | 磁盘IO混合压测 |
memnative |
stressapptest | 内存稳定性精压(数据完整性校验) |
fnstable |
fnscript | 稳定性门禁:社区脚本 self_inspection.py 先行检测硬件(stress CPU + memtester 内存校验),通过后自有压测再跑;未通过则自有压测全部跳过 |
full |
stress-ng | CPU+内存+磁盘 三合一综合压测 |
稳定性门禁(fnstable)
基于飞牛社区 fnscript(MIT)的 self_inspection.py,vendor 原样收录在 docker/stress-test/vendor/fnscript/,源码不做修改:
- 门禁先跑社区脚本:CPU 稳定性(
stress)+ 内存数据校验(memtester可用内存 97% 单遍,30-120 分钟) - 门禁通过 → 自有压测工具(stress-ng/fio 等)再跑一遍,按自有格式出报告
- 门禁失败 → 自有压测全部 skip,报告仍完整输出(硬件已有问题无需再跑)
适配说明(不改社区脚本源码的代价,已在适配层 scripts/fnstable.sh 规避):
- 脚本 CLI 模式无论成败 exit code 均为 0,结果按 stdout 关键词("未发现问题")判定
--memory有 y/n 交互确认,用printf 'y\ny\n'管道喂入- 依赖(python3/psutil/memtester/stress/sudo)预装在压测镜像中
配置(auto-check.yaml):stress.fn_memory 控制门禁是否执行 memtester 内存校验(默认 true,快速验证可设 false)。
压测执行方式(Docker 容器)
压测统一在 Docker 容器中执行:工具与测试脚本预装在镜像里,无需在目标机在线安装,环境一致性好(飞牛 NAS 默认已安装 Docker)。
架构设计
auto-check/
├── docker/ # Docker 镜像维护目录(独立)
│ └── stress-test/
│ ├── Dockerfile # 镜像定义
│ ├── build.sh # 构建 + 导出 + 同步配置(时间戳 tag)
│ ├── scripts/ # 测试脚本(打包进镜像)
│ │ ├── run.sh # 入口脚本(环境变量驱动 + 门禁调度)
│ │ ├── fnstable.sh # 稳定性门禁适配器(fnscript 社区脚本 → 结构化协议)
│ │ ├── cpu.sh # CPU 压测
│ │ ├── memory.sh # 内存压测
│ │ ├── disk.sh # 磁盘压测
│ │ └── ...
│ └── vendor/fnscript/ # 社区脚本原样收录(self_inspection.py,MIT)
└── pkg/stress/
└── runner.go # 核心逻辑:送镜像 + 驱动容器测试
工作流程
- 检测目标机 Docker 可用性(不可用则判失败)
- 检查镜像是否存在(不存在则上传工程目录中的镜像 tar 并
docker load,不依赖 registry) - 启动容器执行测试(脚本在镜像内,环境变量传参)
- 解析容器输出 → 生成报告
容器内执行流程(run.sh)
- 系统信息(
===SYSTEM_INFO===) - 温度监控后台采样(
temp_start.sh) - 稳定性门禁(
fnstable.sh,types 含fnstable时):fnscript 社区脚本先行检测硬件稳定性,未通过则后续自有压测全部 skip - 各项压测:先单项(cpu/memory/disk/memnative)、综合(full)最后
- 温度监控收尾(
===MONITOR:temp===) - 内核日志(
===MONITOR:dmesg===,-T带时间戳)+ 结束标记
配置方式(在 auto-check.yaml 中)
stress:
docker_image: "stress-test:20260824-153045" # 压测镜像 tag(build.sh 自动维护)
docker_tar: "docker/stress-test/stress-test.tar" # 本地镜像文件,目标机无镜像时自动上传并 load
docker_args: "--network=host --privileged"
容器运行时环境变量
| 变量 | 说明 | 默认值 |
|---|---|---|
AUTOCHECK_TYPES |
测试类型(逗号分隔) | cpu,memory |
AUTOCHECK_DURATION |
持续时间(秒) | 30 |
AUTOCHECK_THREADS |
线程数 | 4 |
AUTOCHECK_MEM_SIZE_MB |
内存压测大小 | 0 (自动) |
AUTOCHECK_DISK_SIZE_MB |
磁盘压测大小 | 1024 |
AUTOCHECK_DISK_DIR |
磁盘压测目录 | /tmp |
AUTOCHECK_TEMP_INTERVAL |
温度采样间隔 | 10 |
AUTOCHECK_SAMPLE_INTERVAL |
运行时采样间隔 | 2 |
AUTOCHECK_FN_MEMORY |
fnstable 门禁是否执行 memtester 内存校验 | 1 |
容器运行时挂载(由 auto-check 自动添加)
| 挂载 | 作用 |
|---|---|
-v /sys:/sys:ro |
容器内是独立 sysfs,挂载后才能读到宿主机硬件传感器(温度采集依赖此项) |
-v /etc/localtime:/etc/localtime:ro |
容器时区与宿主机一致,dmesg 时间戳与采样时间才准确 |
注意:镜像内已设置
LC_ALL=C.UTF-8。若 locale 为纯 C,sensors会输出 "+51.0 C"(无 ° 符号),导致温度正则失配、采集不到数据。
构建镜像(维护时使用)
固定分发模式:不依赖 registry,镜像以 tar 文件形式放在工程目录。推荐用 build.sh(自动时间戳 tag):
cd docker/stress-test
./build.sh # 自动取当前时间戳(YYYYMMDD-HHMMSS)
./build.sh 20260824-153045 # 手动指定时间戳(重打/复现)
build.sh 会同时完成:
- 用时间戳 tag 构建镜像(不保留
latest,docker images可区分每次构建) - 导出两份 tar:带时间戳归档
stress-test-<时间戳>.tar+ 同步覆盖stress-test.tar(auto-check 默认引用) - 自动更新
auto-check.yaml的docker_image字段,确保配置与新 tag 同步
手动构建(不推荐)需自行同步 auto-check.yaml 的 docker_image;旧时间戳镜像可 docker rmi stress-test:<旧时间戳> 清理。
镜像内预装工具
| 工具 | 用途 |
|---|---|
stress-ng |
CPU/内存/磁盘压测 |
fio |
磁盘 IO 测试 |
lm-sensors |
温度监控 |
sysstat |
系统性能统计 |
procps |
进程监控 |
python3 + psutil |
fnscript 稳定性门禁运行环境 |
memtester |
fnstable 门禁内存数据校验 |
stress |
fnstable 门禁 CPU 压测 |
sudo |
fnscript 脚本内部调用 sudo memtester(容器以 root 运行,无密码) |
项目结构
auto-check/
├── main.go
├── cmd/
│ └── root.go # 所有子命令
├── pkg/
│ ├── discovery/ # 设备发现
│ ├── sshclient/ # SSH 客户端
│ ├── stress/ # 压力测试(Docker 容器驱动)
│ │ ├── types.go # 类型定义
│ │ ├── tools.go # Docker 环境检测
│ │ ├── metrics.go # 指标定义 + 配置
│ │ └── runner.go # 调度器(送镜像 + 驱动容器)
│ └── report/ # 报告模块
├── go.mod
└── README.md
⚠️ 请在授权设备上使用,未授权扫描/测试可能违反法律法规。