#!/usr/bin/env bash # 在 sandbox 容器里实测 `chromium --headless --print-to-pdf`(md→HTML→PDF 的 PDF 那段)。 # 区分「chromium 缺包」「纯启动超时(/dev/shm 64MB)」「只读 rootfs 下 user-data-dir 写不了」。 # 用法(服务器上,任选其一): # A) 进一个活着的 per-user 容器(最贴真,复用线上 64MB /dev/shm 默认): # C=$(docker ps --filter "label=zcbot.product=sandbox" --format '{{.Names}}' | head -1) # docker cp deploy/sandbox/probe_chromium_pdf.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_chromium_pdf.sh set -u CR="" for c in chromium chromium-browser /usr/bin/chromium; do command -v "$c" >/dev/null 2>&1 && { CR="$c"; break; } done echo "===== /dev/shm size (期望线上 64M) ====="; df -h /dev/shm echo "===== chromium 是否在 (缺包则这里就失败) =====" [ -n "$CR" ] && "$CR" --version 2>&1 | head -1 || { echo "[FAIL] chromium 缺包/不可执行"; exit 1; } # 测试输入:中文 + 表格背景色(print-color-adjust) + 化学式下标 + 超链接,覆盖简报常见元素 cd /tmp cat > in.html <<'HTML'

水泥科研方向 — 冒烟测试

中文渲染、化学式 CO2 / C3S、DOI 超链接

期刊篇数
Cement and Concrete Research11
HTML run() { # $1=label $2..=extra flags local label="$1"; shift local ts=$SECONDS timeout 60 "$CR" --headless --disable-gpu --no-sandbox \ --user-data-dir=/tmp/cr-$label "$@" \ --print-to-pdf=/tmp/out-$label.pdf /tmp/in.html >"$label.log" 2>&1 local rc=$? echo "rc=$rc 用时=$((SECONDS-ts))s"; tail -3 "$label.log" if [ -s "/tmp/out-$label.pdf" ]; then echo "[$label 出图] $(wc -c < /tmp/out-$label.pdf) bytes -> /tmp/out-$label.pdf" else echo "[$label 无图]" fi } echo; echo "===== A: 漏 --disable-dev-shm-usage(线上 64MB /dev/shm)→ 可能挂起/超时 =====" run A echo; echo "===== B: 加 --disable-dev-shm-usage(走 /tmp)→ 预期成功出 PDF =====" run B --disable-dev-shm-usage echo; echo "===== 结论 =====" echo "B 出图 => chromium print-to-pdf 可用,render_pdf.py 固定带 --disable-dev-shm-usage + --user-data-dir=/tmp/* 即可" echo "B 无图/超时 => 看 B.log;若是 /dev/shm 仍报错,给 docker run 加 --shm-size" echo "chromium 缺/全失败 => 更深环境问题,镜像没装好 chromium/字体"