diff --git a/scripts/linux/lib/common.sh b/scripts/linux/lib/common.sh index 3b9bb9c..a53993e 100644 --- a/scripts/linux/lib/common.sh +++ b/scripts/linux/lib/common.sh @@ -256,6 +256,9 @@ Restart=always RestartSec=5 # 避免构建/依赖短暂失败时触发 systemd 默认「5 次/10s」后永久停跑(表现为 live-edge 502、:8001 无监听) StartLimitIntervalSec=0 +# 首次 npm build / 冷启动较慢;过小会导致主进程在 listen 前被 SIGTERM +TimeoutStartSec=300 +TimeoutStopSec=30 [Install] WantedBy=multi-user.target diff --git a/web.py b/web.py index 93226f6..649024f 100644 --- a/web.py +++ b/web.py @@ -342,12 +342,17 @@ async def lifespan(app: FastAPI): except Exception: # PM2/Shell 异常时不阻塞整站启动(否则反代持续 502) pass - try: - ok, msg = await asyncio.to_thread(ensure_scrcpy_jar, BASE_DIR) - if not ok: - print(f"[web] scrcpy-server: {msg}", file=sys.stderr) - except Exception as exc: - print(f"[web] scrcpy-server bootstrap: {exc}", file=sys.stderr) + + # scrcpy-server 下载可走外网重试,勿阻塞启动;否则 systemd 默认 TimeoutStartSec≈90s 会杀进程,:8001 永不起 + async def _bootstrap_scrcpy() -> None: + try: + ok, msg = await asyncio.to_thread(ensure_scrcpy_jar, BASE_DIR) + if not ok: + print(f"[web] scrcpy-server: {msg}", file=sys.stderr) + except Exception as exc: + print(f"[web] scrcpy-server bootstrap: {exc}", file=sys.stderr) + + asyncio.create_task(_bootstrap_scrcpy()) yield