Files
membank/auto-check/docker/stress-test/scripts/fnstable.sh
张威33321 a8fa159f0f chore: 同步本地更改
- 新增 aio-mcp 项目框架
- 新增 .trae/skills/ OCR/SKU 设计工具
- 更新 auto-check 配置和 stress 包
- 删除 fnhelp 文档目录
- 更新 Docker 压力测试脚本
2026-08-27 20:38:13 +08:00

82 lines
2.8 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.
# fnstable.sh - fnscript 稳定性门禁(社区脚本 self_inspection.pyvendor 原样收录不改源码)
#
# 思路先用社区脚本检测硬件真实稳定性stress CPU 压测 + memtester 内存数据校验),
# 通过后自有压测工具再跑一遍出报告;不通过则 run.sh 跳过自有压测。
#
# 适配注意(不改源码的代价,已逐一规避):
# 1. self_inspection.py CLI 模式无论成败 exit code 均为 0
# 只能按 stdout 关键词判定结果("未发现问题" = 通过)。
# 2. --memory 内含两处 y/n 交互确认input()),非交互环境会 EOFError
# 用 printf 'y\ny\n' 管道喂入(两处确认都覆盖)。
# 3. 脚本内部调 sudo memtester / stress依赖已在镜像中预装root 下 sudo 直接可用)。
# 4. memtester 测试可用内存的 97%,单遍耗时 30-120 分钟(由内存大小决定),
# 可用 AUTOCHECK_FN_MEMORY=0 关闭内存校验只做 CPU 门禁。
#
# 输出遵守 auto-check 结构化协议(===TEST:fnstable=== 块),
# 并设置 GATE_PASSED 供 run.sh 决定是否继续自有压测。
echo "===TEST:fnstable==="
FN_SCRIPT="/vendor/fnscript/self_inspection.py"
FN_DURATION="${AUTOCHECK_DURATION:-30}"
FN_MEMORY="${AUTOCHECK_FN_MEMORY:-1}"
FN_ALL_PASSED=1
START_TIME=$(date +%s%N)
# ---- 1. CPU 稳定性fnscript: stress --cpu 4 --timeout N----
set +e
FN_CPU_OUT=$(python3 "$FN_SCRIPT" --cpu "$FN_DURATION" 2>&1)
set -e
if printf '%s' "$FN_CPU_OUT" | grep -q "未发现问题"; then
FN_CPU_STATUS="pass"
else
FN_CPU_STATUS="fail"
FN_ALL_PASSED=0
fi
# ---- 2. 内存稳定性fnscript: sudo memtester <可用内存97%> 1数据校验----
FN_MEM_STATUS="skip"
FN_MEM_NOTE="未启用AUTOCHECK_FN_MEMORY=0"
if [ "$FN_MEMORY" = "1" ]; then
FN_MEM_NOTE=""
set +e
FN_MEM_OUT=$(printf 'y\ny\n' | python3 "$FN_SCRIPT" --memory 2>&1)
set -e
if printf '%s' "$FN_MEM_OUT" | grep -q "未发现问题"; then
FN_MEM_STATUS="pass"
else
FN_MEM_STATUS="fail"
FN_ALL_PASSED=0
fi
fi
END_TIME=$(date +%s%N)
DURATION_MS=$(( (END_TIME - START_TIME) / 1000000 ))
# ---- 3. 汇总结果(门禁语义:任一子项失败即整体失败)----
if [ "$FN_ALL_PASSED" -eq 1 ]; then
echo 'status:pass'
else
echo 'status:fail'
fi
echo "duration:${DURATION_MS}ms"
echo "output:[CPU] ${FN_CPU_STATUS} (stress ${FN_DURATION}s)"
printf '%s\n' "$FN_CPU_OUT" | while IFS= read -r line; do
[ -n "$line" ] && echo "output: $line"
done
if [ "$FN_MEM_STATUS" = "skip" ]; then
echo "output:[MEM] skip - ${FN_MEM_NOTE}"
else
echo "output:[MEM] ${FN_MEM_STATUS} (memtester 可用内存97% 单遍校验)"
printf '%s\n' "$FN_MEM_OUT" | while IFS= read -r line; do
[ -n "$line" ] && echo "output: $line"
done
fi
echo ''
# 供 run.sh 门禁判断fnstable 失败 → 跳过自有压测)
GATE_PASSED=$FN_ALL_PASSED