chore: 同步本地更改
- 新增 aio-mcp 项目框架 - 新增 .trae/skills/ OCR/SKU 设计工具 - 更新 auto-check 配置和 stress 包 - 删除 fnhelp 文档目录 - 更新 Docker 压力测试脚本
This commit is contained in:
81
auto-check/docker/stress-test/scripts/fnstable.sh
Normal file
81
auto-check/docker/stress-test/scripts/fnstable.sh
Normal file
@@ -0,0 +1,81 @@
|
||||
# fnstable.sh - fnscript 稳定性门禁(社区脚本 self_inspection.py,vendor 原样收录不改源码)
|
||||
#
|
||||
# 思路:先用社区脚本检测硬件真实稳定性(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
|
||||
Reference in New Issue
Block a user