[예측] - OpenDrift Python API 서버 및 스크립트 추가 (prediction/opendrift/) - 시뮬레이션 상태 폴링 훅(useSimulationStatus), 로딩 오버레이 추가 - HydrParticleOverlay: deck.gl 기반 입자 궤적 시각화 레이어 - OilSpillView/LeftPanel/RightPanel: 시뮬레이션 실행·결과 표시 UI 개편 - predictionService/predictionRouter: 시뮬레이션 CRUD 및 상태 관리 API - simulation.ts: OpenDrift 연동 엔드포인트 확장 - docs/PREDICTION-GUIDE.md: 예측 기능 개발 가이드 추가 [CCTV/항공방제] - CCTV 오일 감지 GPU 추론 연동 (OilDetectionOverlay, useOilDetection) - CCTV 안전관리 감지 기능 추가 (선박 출입, 침입 감지) - oil_inference_server.py: Python GPU 추론 서버 [관리자] - 관리자 화면 고도화 (사용자/권한/게시판/선박신호 패널) - AdminSidebar, BoardMgmtPanel, VesselSignalPanel 신규 컴포넌트 [기타] - DB: 시뮬레이션 결과, 선박보험 시드(1391건), 역할 정리 마이그레이션 - 팀 워크플로우 v1.6.1 동기화 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
53 lines
1.6 KiB
Bash
53 lines
1.6 KiB
Bash
#!/bin/bash
|
|
# stop_server.sh - 백그라운드 FastAPI 서버를 종료하는 스크립트
|
|
|
|
# 사용할 PID 파일 및 로그 파일 이름 정의
|
|
PID_FILE="server.pid"
|
|
LOG_FILE="uvicorn.log"
|
|
|
|
# ----------------------------------------------------
|
|
|
|
echo "--- FastAPI 서버 종료 스크립트 ---"
|
|
|
|
# PID 파일이 존재하는지 확인
|
|
if [ ! -f "$PID_FILE" ]; then
|
|
echo "오류: PID 파일 ($PID_FILE)을 찾을 수 없습니다. 서버가 실행 중이 아닐 수 있습니다."
|
|
exit 1
|
|
fi
|
|
|
|
# PID 파일에서 PID 읽기
|
|
PID=$(cat "$PID_FILE")
|
|
|
|
# 해당 PID를 가진 프로세스가 실제로 실행 중인지 확인
|
|
if kill -0 "$PID" 2>/dev/null; then
|
|
echo "PID $PID 를 가진 서버 프로세스를 종료합니다..."
|
|
# -TERM 시그널을 보내 프로세스를 우아하게 종료 시도
|
|
kill -TERM "$PID"
|
|
|
|
# 프로세스가 종료될 때까지 최대 10초 대기
|
|
for i in {1..10}; do
|
|
if ! kill -0 "$PID" 2>/dev/null; then
|
|
echo "서버 (PID $PID)가 성공적으로 종료되었습니다."
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
# 10초 후에도 종료되지 않았다면 강제 종료
|
|
if kill -0 "$PID" 2>/dev/null; then
|
|
echo "경고: 서버가 정상 종료되지 않아 강제 종료 (kill -9) 합니다."
|
|
kill -9 "$PID"
|
|
fi
|
|
else
|
|
echo "PID $PID 를 가진 프로세스가 실행 중이지 않습니다."
|
|
fi
|
|
|
|
# PID 파일 및 로그 파일 정리
|
|
rm -f "$PID_FILE"
|
|
echo "PID 파일($PID_FILE)이 삭제되었습니다."
|
|
# 로그 파일도 필요하면 삭제하거나 보관할 수 있습니다.
|
|
# rm -f "$LOG_FILE"
|
|
|
|
echo "종료 프로세스 완료."
|
|
|