#!/bin/bash # --- 🧠 λ‡Œμ‚¬λ£Œ μ„œλ²„ 관리 슀크립트 --- APP_NAME="brain.py" PID_FILE="server.pid" LOG_FILE="logs/console.log" # 둜그 디렉토리 생성 확인 mkdir -p logs start() { if [ -f $PID_FILE ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null; then echo "⚠️ μ„œλ²„κ°€ 이미 μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. (PID: $PID)" return fi fi echo "πŸš€ μ„œλ²„λ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€... (Port: 5093)" # nohup으둜 μ‹€ν–‰ν•˜μ—¬ μ„Έμ…˜ μ’…λ£Œ 후에도 μœ μ§€ nohup python3 $APP_NAME > $LOG_FILE 2>&1 & # PID μ €μž₯ echo $! > $PID_FILE echo "βœ… μ„œλ²„ 기동 μ™„λ£Œ! (PID: $!)" echo "πŸ“ μ½˜μ†” 둜그: $LOG_FILE" } stop() { # 1. PID 파일 기반 μ’…λ£Œ μ‹œλ„ if [ -f $PID_FILE ]; then PID=$(cat $PID_FILE) echo "πŸ›‘ PID νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ μ„œλ²„ 쀑지 μ‹œλ„... (PID: $PID)" if kill -0 $PID 2>/dev/null; then kill $PID 2>/dev/null # μ’…λ£Œ λŒ€κΈ° for i in {1..3}; do if ! kill -0 $PID 2>/dev/null; then break; fi sleep 1 done fi rm -f $PID_FILE fi # 2. 이름 기반 μž”λ₯˜ ν”„λ‘œμ„ΈμŠ€ μ •λ°€ μ†Œνƒ• # grep -v grep λ“±μœΌλ‘œ 자기 μžμ‹ μ΄λ‚˜ μ—‰λš±ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ μ£½μ§€ μ•Šλ„λ‘ 필터링 REMAINING_PIDS=$(ps aux | grep "python3 $APP_NAME" | grep -v "grep" | awk '{print $2}') if [ ! -z "$REMAINING_PIDS" ]; then echo "πŸ” 관리 μ™Έ μž”λ₯˜ ν”„λ‘œμ„ΈμŠ€ 감지: $REMAINING_PIDS" echo "πŸ›‘ μž”λ₯˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ œ μ’…λ£Œν•©λ‹ˆλ‹€..." kill -9 $REMAINING_PIDS 2>/dev/null fi echo "βœ… λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€κ°€ μ •λ¦¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€." } status() { if [ -f $PID_FILE ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null; then echo "🟒 μ„œλ²„κ°€ ν˜„μž¬ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. (PID: $PID)" else echo "πŸ”΄ PID νŒŒμΌμ€ μžˆμœΌλ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€." fi else echo "βšͺ μ„œλ²„κ°€ 쀑지 μƒνƒœμž…λ‹ˆλ‹€." fi } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 2 start ;; status) status ;; *) echo "μ‚¬μš©λ²•: $0 {start|stop|restart|status}" exit 1 esac exit 0