#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")/.." PORT="${1:-${INTRANET_PORT:-8010}}" HEALTH_URL="http://127.0.0.1:${PORT}/health" COMPARE_HEALTH_URL="http://127.0.0.1:${PORT}/health/wehago-compare" if [ ! -x ".venv/bin/python" ]; then echo "가상환경이 없습니다. 먼저 아래를 실행하세요." echo "python3 -m venv .venv" echo "source .venv/bin/activate" echo "pip install -r requirements.txt" exit 1 fi if curl -fsS --max-time 2 "$HEALTH_URL" >/dev/null 2>&1; then if curl -fsS --max-time 4 "$COMPARE_HEALTH_URL" >/dev/null 2>&1; then echo "이미 실행 중입니다: $HEALTH_URL" exit 0 fi echo "서버 포트는 열려 있지만 전표비교 readiness 가 실패했습니다. 재시작합니다." EXISTING_PID="$(ss -ltnp "( sport = :${PORT} )" | awk 'NR>1 {print $NF}' | sed -n 's/.*pid=\([0-9][0-9]*\).*/\1/p' | head -n 1)" if [ -n "${EXISTING_PID}" ]; then kill "${EXISTING_PID}" >/dev/null 2>&1 || true sleep 2 fi fi if ss -ltn "( sport = :${PORT} )" | tail -n +2 | grep -q .; then echo "포트 ${PORT} 는 이미 다른 프로세스가 사용 중입니다." echo "기존 서버가 멈춘 상태라면 먼저 종료한 뒤 다시 실행하세요." ss -ltnp "( sport = :${PORT} )" || true exit 1 fi export INTRANET_AUTO_RELOAD="${INTRANET_AUTO_RELOAD:-0}" export INTRANET_PORT="$PORT" echo "서버를 시작합니다: http://127.0.0.1:${PORT} (auto_reload=${INTRANET_AUTO_RELOAD})" echo "예기치 않게 종료되면 2초 후 자동 재시작합니다." while true; do ./.venv/bin/python main.py exit_code=$? if [ "$exit_code" -eq 0 ]; then exit 0 fi echo "서버가 종료되었습니다 (exit=${exit_code}). 2초 후 다시 시작합니다." sleep 2 done