Files
HM_project_Viewer_Board/scripts/run_server.sh
T

52 lines
1.7 KiB
Bash
Executable File

#!/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