From 55c18e6a83e743c4f83958de4a7e09292f79f60f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=ED=97=8C?= Date: Tue, 4 Aug 2026 16:30:38 +0900 Subject: [PATCH] =?UTF-8?q?fix(lps):=20=EC=9B=8C=EC=BB=A4=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20Xvfb=20=EA=B0=80=20stale=20loc?= =?UTF-8?q?k=20=EC=9C=BC=EB=A1=9C=20=EC=A3=BD=EC=96=B4=20=EB=AA=A8?= =?UTF-8?q?=EB=93=A0=20=ED=81=AC=EB=A1=A4=EC=9D=B4=20=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=ED=95=98=EB=8D=98=20=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit docker compose start/restart 는 컨테이너 파일시스템을 재사용해 지난 실행의 /tmp/.X99-lock 과 /tmp/.X11-unix/X99 가 남는다. Xvfb 가 이걸 '이미 켜진 디스플레이'로 보고 종료하면 DISPLAY 가 없어 headful Chrome 이 못 뜨고, 워커는 살아있는 채로 launch_persistent_context 가 'Missing X server or $DISPLAY' 로 실패한다. → CMD 에서 Xvfb 기동 전에 stale lock/소켓을 제거한다. 재현·검증: restart 2회 연속 Xvfb 정상 기동 확인. --- lps/Dockerfile.worker | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lps/Dockerfile.worker b/lps/Dockerfile.worker index be8a597..7d5c553 100644 --- a/lps/Dockerfile.worker +++ b/lps/Dockerfile.worker @@ -43,4 +43,9 @@ HEALTHCHECK --interval=30s --timeout=8s --start-period=120s --retries=3 \ # Xvfb(가상 디스플레이)를 백그라운드로 띄우고 python 을 exec 로 승계 실행. # → 헤드풀 Chromium 이 :99 에 뜨고, 워커 로그는 그대로 docker logs 로 나온다(xvfb-run 은 로그를 삼킴). -CMD ["bash", "-c", "Xvfb :99 -screen 0 1920x1080x24 -nolisten tcp >/dev/null 2>&1 & sleep 1; exec python worker_main.py"] +# +# stale lock 제거가 먼저다(2026-08-04): `docker compose start`(재시작)는 컨테이너 파일시스템을 +# 그대로 재사용하므로 지난 실행의 /tmp/.X99-lock·/tmp/.X11-unix/X99 가 남는다. Xvfb 는 이걸 +# '이미 켜진 디스플레이'로 보고 죽고 → DISPLAY 없이 headful Chrome 이 못 떠 **모든 크롤이 조용히 실패**한다 +# (증상: 워커는 살아있는데 launch_persistent_context 가 'Missing X server or $DISPLAY' 로 실패). +CMD ["bash", "-c", "rm -f /tmp/.X99-lock /tmp/.X11-unix/X99; Xvfb :99 -screen 0 1920x1080x24 -nolisten tcp >/dev/null 2>&1 & sleep 1; exec python worker_main.py"]