#!/usr/bin/env bash # # 로컬 LPS 워커 실행 (대화형). 실행하면 동시성 등을 골라 입력한다. # 최초 실행 시 venv 생성 + 의존성 설치까지 자동으로 한다. # 워커 = 실제 검색 수행(네이버/쿠팡/오픈마켓 크롤). 실행 시 쿠팡용 Chrome 창이 뜬다(정상). # set -euo pipefail cd "$(dirname "$0")" # lps/ VENV=".venv" PY="$VENV/bin/python" # 1) venv + 의존성 보장 if [[ ! -d "$VENV" ]]; then echo "[setup] venv 생성 + 의존성 설치..." python3 -m venv "$VENV" "$PY" -m pip install -q --upgrade pip "$PY" -m pip install -q -r requirements.txt fi # 2) config 보장 if [[ ! -f config/config.local.toml ]]; then echo "[error] config/config.local.toml 이 없습니다. 아래로 생성 후 값을 채우세요:" echo " cp config/config.local.toml.example config/config.local.toml" exit 1 fi # 3) 이미 워커가 떠 있으면 안내 if pgrep -f worker_main.py >/dev/null 2>&1; then echo "[info] 이미 워커(worker_main.py)가 실행 중입니다." read -rp "기존 워커를 종료하고 새로 띄울까요? [y/N]: " kill_old if [[ "${kill_old:-N}" =~ ^[Yy] ]]; then pkill -f worker_main.py || true; sleep 1; echo "[info] 기존 워커 종료" else echo "취소합니다."; exit 0 fi fi # 4) 동시성 입력 (상품 동시 검색 수 · 워커별 브라우저 세트 · Chrome 최대 4×N개) echo "── 워커 설정 ──" read -rp "동시 검색 수 WORKER_CONCURRENCY [3] (로컬 권장 2~3): " CONC CONC="${CONC:-3}" # 5) Chrome 프로필 영속 디렉터리 (재시작해도 cf_clearance 유지 → 재웜업 회피). 비우면 기본(/tmp) read -rp "Chrome 프로필 디렉터리 LPS_PROFILE_DIR [.profiles] (엔터=유지): " PROFILE PROFILE="${PROFILE:-.profiles}" mkdir -p "$PROFILE" # 6) 오픈마켓 폴백 — 기본 비활성(2026-07-10 협의: 최종 최저가 기여 0회, 검색당 최대 15s·프록시 비용의 대부분) read -rp "오픈마켓 폴백 LPS_FALLBACKS [비활성] (켜려면 예: gmarket,auction,st11): " FALLBACKS export LPS_FALLBACKS="${FALLBACKS:-}" export APP_ENV=local export WORKER_CONCURRENCY="$CONC" export LPS_PROFILE_DIR="$PROFILE" export PYTHONUNBUFFERED=1 # 로그 실시간 출력 echo "" echo "[run] worker_main.py (동시성=$CONC · 프로필=$PROFILE · 폴백=${LPS_FALLBACKS:-OFF})" echo " 기동 로그의 'DECODO 프리플라이트 OK — egress IP ...' / 'AI: ON/OFF' 확인" echo " 중단: Ctrl+C" echo "" exec "$PY" worker_main.py