#!/bin/bash # 压力测试入口脚本(打包在镜像内) # auto-check 启动容器时通过环境变量传参,执行完整测试流程: # 系统信息 → 温度监控启动 → 各项压测(先单项、后综合)→ 温度监控收尾 → 内核日志 set -e # 统一 UTF-8 locale:否则 sensors 输出 "+51.0 C"(无 ° 符号), # 脚本中 (?=°C) 的温度正则会全部失配,导致温度采集不到 export LC_ALL=C.UTF-8 export LANG=C.UTF-8 # 默认值(docker -e 传入时覆盖) export AUTOCHECK_TYPES="${AUTOCHECK_TYPES:-cpu,memory}" export AUTOCHECK_DURATION="${AUTOCHECK_DURATION:-30}" export AUTOCHECK_THREADS="${AUTOCHECK_THREADS:-4}" export AUTOCHECK_MEM_SIZE_MB="${AUTOCHECK_MEM_SIZE_MB:-0}" export AUTOCHECK_DISK_SIZE_MB="${AUTOCHECK_DISK_SIZE_MB:-1024}" export AUTOCHECK_TEMP_INTERVAL="${AUTOCHECK_TEMP_INTERVAL:-10}" export AUTOCHECK_SAMPLE_INTERVAL="${AUTOCHECK_SAMPLE_INTERVAL:-2}" if [ -n "$AUTOCHECK_DISK_DIR" ]; then export AUTOCHECK_DISK_DIR; fi # 1. 系统信息 source /scripts/sysinfo.sh # 2. 温度监控(后台周期采样) source /scripts/temp_start.sh # 未知类型输出 skip,保证报告完整 for T in $(echo "$AUTOCHECK_TYPES" | tr ',' ' '); do case "$T" in cpu|memory|disk|memnative|full|fnstable) ;; *) echo "===TEST:$T===" echo "status:skip" echo "output:未知测试类型" echo "" ;; esac done # 3. 稳定性门禁(fnscript 社区脚本先行,不通过则跳过自有压测) # fnstable.sh 内部设置 GATE_PASSED(1=通过 / 0=失败) GATE_PASSED=1 REQ_TYPES=",${AUTOCHECK_TYPES// /}," case "$REQ_TYPES" in *,fnstable,*) source /scripts/fnstable.sh ;; esac # 4. 按固定顺序执行请求的自有测试(先单项、综合 full 最后) # 门禁未通过 → 硬件已有问题,自有压测全部 skip(报告仍完整输出) if [ "$GATE_PASSED" -eq 1 ]; then for TYPE in cpu memory disk memnative full; do case "$REQ_TYPES" in *",$TYPE,"*) source "/scripts/$TYPE.sh" ;; esac done else for TYPE in cpu memory disk memnative full; do case "$REQ_TYPES" in *",$TYPE,"*) echo "===TEST:$TYPE===" echo "status:skip" echo "output:fnscript 稳定性门禁未通过,跳过自有压测" echo "" ;; esac done fi # 5. 温度监控收尾 source /scripts/temp_end.sh # 6. 内核日志 + 结束标记 source /scripts/dmesg.sh