#!/bin/bash APP_NAME="owrawww" APP_DIR="/home/www/owrainfo" JAR="$APP_DIR/owrawww-0.0.1-SNAPSHOT.jar" LOG_DIR="$APP_DIR/logs" PID_FILE="$APP_DIR/owrawww.pid" JAVA_HOME="/opt/jdk-21" start() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if kill -0 "$PID" 2>/dev/null; then echo "[$APP_NAME] 이미 실행 중입니다. (PID: $PID)" exit 1 else rm -f "$PID_FILE" fi fi mkdir -p "$LOG_DIR" echo "[$APP_NAME] 시작 중..." nohup "$JAVA_HOME/bin/java" \ -jar "$JAR" \ --spring.profiles.active=prod \ > /dev/null 2>&1 & PID=$! echo $PID > "$PID_FILE" echo "[$APP_NAME] 시작됨. (PID: $PID)" echo "[$APP_NAME] 로그: $LOG_DIR/owrawww.log" } stop() { if [ ! -f "$PID_FILE" ]; then echo "[$APP_NAME] PID 파일이 없습니다. 실행 중이 아닌 것 같습니다." exit 1 fi PID=$(cat "$PID_FILE") if ! kill -0 "$PID" 2>/dev/null; then echo "[$APP_NAME] 프로세스($PID)가 이미 종료되어 있습니다." rm -f "$PID_FILE" exit 0 fi echo "[$APP_NAME] 종료 중... (PID: $PID)" kill "$PID" for i in $(seq 1 30); do if ! kill -0 "$PID" 2>/dev/null; then rm -f "$PID_FILE" echo "[$APP_NAME] 정상 종료됨." exit 0 fi sleep 1 done echo "[$APP_NAME] 강제 종료합니다." kill -9 "$PID" rm -f "$PID_FILE" echo "[$APP_NAME] 강제 종료됨." } status() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if kill -0 "$PID" 2>/dev/null; then echo "[$APP_NAME] 실행 중 (PID: $PID)" else echo "[$APP_NAME] 중지됨 (PID 파일 잔존)" fi else echo "[$APP_NAME] 중지됨" fi } case "$1" in start) start ;; stop) stop ;; restart) stop; sleep 2; start ;; status) status ;; *) echo "사용법: $0 {start|stop|restart|status}" exit 1 ;; esac