30 lines
2.0 KiB
Bash
30 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
||
# 在 sandbox 容器里实测 mmdc/chromium:区分「chromium 缺包」vs「纯启动超时(/dev/shm 64MB)」。
|
||
# 用法(服务器上,任选其一):
|
||
# A) 进一个活着的 per-user 容器(最贴真,复用线上 64MB /dev/shm 默认):
|
||
# C=$(docker ps --filter "label=zcbot.product=sandbox" --format '{{.Names}}' | head -1)
|
||
# docker cp deploy/sandbox/probe_mermaid.sh "$C":/tmp/probe.sh
|
||
# docker exec "$C" bash /tmp/probe.sh
|
||
# B) 没有活容器时,起一个临时的(显式 NOT 传 --shm-size,复现线上 64MB):
|
||
# docker run --rm --read-only --tmpfs /tmp:exec,size=512m,mode=1777 \
|
||
# --cap-drop=ALL --security-opt=no-new-privileges \
|
||
# --entrypoint bash zcbot-sandbox:latest /dev/stdin < deploy/sandbox/probe_mermaid.sh
|
||
set -u
|
||
echo "===== /dev/shm size (期望线上 64M) ====="; df -h /dev/shm
|
||
echo "===== chromium 是否在 (缺包则这里就失败) ====="
|
||
command -v chromium && chromium --version 2>&1 | head -1 || echo "[FAIL] chromium 缺包/不可执行"
|
||
cd /tmp; printf 'flowchart TB\n A[甲]-->B[乙]\n' > d.mmd
|
||
|
||
echo; echo "===== A: 模型自造 config(漏 --disable-dev-shm-usage)→ 预期挂起/超时 ====="
|
||
printf '{"args":["--no-sandbox","--disable-setuid-sandbox"]}' > bad.json
|
||
ts=$SECONDS; timeout 60 mmdc -i d.mmd -o a.png -p bad.json >a.log 2>&1; rc=$?
|
||
echo "rc=$rc 用时=$((SECONDS-ts))s"; tail -3 a.log; ls -l a.png 2>/dev/null && echo "[A 出图]" || echo "[A 无图]"
|
||
|
||
echo; echo "===== B: 镜像备好的 /sandbox/puppeteer-config.json(含 --disable-dev-shm-usage)→ 预期成功 ====="
|
||
ts=$SECONDS; timeout 60 mmdc -i d.mmd -o b.png -p /sandbox/puppeteer-config.json >b.log 2>&1; rc=$?
|
||
echo "rc=$rc 用时=$((SECONDS-ts))s"; tail -3 b.log; ls -l b.png 2>/dev/null && echo "[B 出图]" || echo "[B 无图]"
|
||
|
||
echo; echo "===== 结论 ====="
|
||
echo "chromium 在 + A挂超时 + B出图 => 纯 /dev/shm 64MB 问题,fix=给 docker run 加 --shm-size 或强制用 B 的 config"
|
||
echo "chromium 缺/B 也失败 => 更深的环境问题,看上面 b.log"
|