File size: 1,336 Bytes
77169b4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #!/usr/bin/env bash
set -euo pipefail
DATA_DIR="${WEB2API_DATA_DIR:-/data}"
CONFIG_PATH="${WEB2API_CONFIG_PATH:-${DATA_DIR}/config.yaml}"
DB_PATH="${WEB2API_DB_PATH:-${DATA_DIR}/db.sqlite3}"
XVFB_ARGS="${XVFB_SCREEN_ARGS:--screen 0 1600x900x24}"
DISPLAY_NUM="${XVFB_DISPLAY_NUM:-99}"
DISPLAY_VALUE=":${DISPLAY_NUM}"
mkdir -p "${DATA_DIR}"
export HOME="${DATA_DIR}"
export WEB2API_CONFIG_PATH="${CONFIG_PATH}"
export WEB2API_DB_PATH="${DB_PATH}"
export PYTHONUNBUFFERED=1
# 清理残留的浏览器 profile,避免 Singleton* 锁导致 Chromium 认为 profile 正在被使用。
rm -rf "${HOME}/fp-data"
if [[ ! -f "${CONFIG_PATH}" ]]; then
cp /app/docker/config.container.yaml "${CONFIG_PATH}"
fi
mkdir -p "${HOME}/fp-data"
if [[ $# -gt 0 ]]; then
exec "$@"
fi
cleanup() {
if [[ -n "${XVFB_PID:-}" ]]; then
kill "${XVFB_PID}" >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT INT TERM
mkdir -p /tmp/.X11-unix
rm -f "/tmp/.X${DISPLAY_NUM}-lock"
Xvfb "${DISPLAY_VALUE}" ${XVFB_ARGS} -nolisten tcp -ac &
XVFB_PID=$!
for _ in $(seq 1 100); do
if [[ -S "/tmp/.X11-unix/X${DISPLAY_NUM}" ]]; then
break
fi
sleep 0.1
done
if [[ ! -S "/tmp/.X11-unix/X${DISPLAY_NUM}" ]]; then
echo "Xvfb failed to create display ${DISPLAY_VALUE}" >&2
exit 1
fi
export DISPLAY="${DISPLAY_VALUE}"
exec python -u /app/main.py
|