#!/bin/bash # start_server.sh - FastAPI 서버를 백그라운드에서 시작하는 스크립트 # 사용할 PID 파일 및 로그 파일 이름 정의 PID_FILE="server.pid" LOG_FILE="uvicorn.log" # uvicorn 명령 (가상환경이 활성화되어 있어야 함, 또는 venv 경로를 명시해야 함) # 예를 들어, venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000 UVICORN_CMD="uvicorn api:app --host 0.0.0.0 --port 5003 --workers 1" # ---------------------------------------------------- echo "--- FastAPI 서버 시작 스크립트 ---" # 서버가 이미 실행 중인지 확인 (PID 파일 존재 여부) if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") # PID가 실제로 실행 중인 프로세스인지 확인 if kill -0 "$PID" 2>/dev/null; then echo "오류: 서버가 이미 PID $PID 로 실행 중입니다. 먼저 종료해주세요." exit 1 else echo "경고: 오래된 PID 파일($PID_FILE)을 찾았습니다. 삭제하고 새로 시작합니다." rm -f "$PID_FILE" fi fi echo "PID 파일 경로: $PID_FILE" echo "로그 파일 경로: $LOG_FILE" echo "명령어 실행: $UVICORN_CMD" # uvicorn을 nohup을 사용하여 백그라운드 실행. 모든 출력을 로그 파일로 리다이렉트. # $!는 백그라운드에서 실행된 명령어의 PID를 반환합니다. nohup $UVICORN_CMD > "$LOG_FILE" 2>&1 & # 백그라운드 프로세스의 PID를 파일에 저장 echo $! > "$PID_FILE" NEW_PID=$(cat "$PID_FILE") echo "=====================================" echo "서버가 성공적으로 백그라운드에서 시작되었습니다." echo "새로운 PID: $NEW_PID" echo "로그 확인: tail -f $LOG_FILE" echo "종료 명령: ./stop_server.sh" echo "====================================="