Files

109 lines
2.5 KiB
Bash
Raw Permalink Normal View History

2026-03-06 02:52:38 +08:00
#!/bin/bash
# API 서버 배포 및 실행 스크립트
# 사용법: sudo ./runApi.sh
# 필요한 경로/파일이 다를 경우 아래 변수만 수정하세요.
set -euo pipefail
JAR_NAME="${JAR_NAME:-apiServer-0.0.1-SNAPSHOT.jar}"
PID_FILE="${PID_FILE:-/home/api.pid}"
RUN_DIR="${RUN_DIR:-/home/run}"
BUILD_DIR="${BUILD_DIR:-/home/build}"
BACKUP_DIR="${BACKUP_DIR:-/home/backup}"
JAVA_BIN="${JAVA_BIN:-/home/openjdk17/bin/java}"
# SCOUTER_AGENT="${SCOUTER_AGENT:-/home/scouter/agent.java/scouter.agent.jar}"
# SCOUTER_CONF="${SCOUTER_CONF:-/home/scouter/agent.java/conf/scouter.conf}"
SPRING_PROFILE="${SPRING_PROFILE:-real}"
timestamp() {
date +"%Y%m%d_%H%M%S"
}
log() {
echo "[runApi] $*"
}
ensure_paths() {
mkdir -p "$RUN_DIR" "$BACKUP_DIR" "$BUILD_DIR"
}
stop_app() {
if [[ -f "$PID_FILE" ]]; then
local pid
pid=$(cat "$PID_FILE" 2>/dev/null || true)
if [[ -n "${pid:-}" ]] && ps -p "$pid" > /dev/null 2>&1; then
log "기존 프로세스 종료: $pid"
kill -9 "$pid" || true
else
log "PID 파일은 있으나 실행 중인 프로세스가 없습니다."
fi
rm -f "$PID_FILE"
else
log "종료할 PID 파일이 없습니다."
fi
}
backup_old() {
local current="$RUN_DIR/$JAR_NAME"
if [[ -f "$current" ]]; then
local backup="$BACKUP_DIR/oldApi_$(timestamp).jar"
log "기존 JAR 백업 -> $backup"
mv "$current" "$backup"
else
log "백업할 기존 JAR이 없습니다."
fi
}
copy_new() {
local source="$BUILD_DIR/$JAR_NAME"
local target="$RUN_DIR/$JAR_NAME"
# 소스와 타겟이 같으면 복사 불필요
if [[ "$source" == "$target" ]]; then
if [[ -f "$target" ]]; then
log "배포된 JAR 확인 -> $target"
return 0
else
log "새 JAR을 찾을 수 없습니다: $target"
exit 1
fi
fi
if [[ ! -f "$source" ]]; then
log "새 JAR을 찾을 수 없습니다: $source"
exit 1
fi
log "새 JAR 복사 -> $target"
cp "$source" "$target"
}
start_app() {
local target="$RUN_DIR/$JAR_NAME"
log "애플리케이션 시작"
local log_dir="${LOG_DIR:-/home/log/core}"
local log_file="${LOG_FILE:-$log_dir/apiServer.log}"
mkdir -p "$log_dir"
nohup "$JAVA_BIN" \
-Duser.timezone=GMT+09:00 \
-Dspring.profiles.active="$SPRING_PROFILE" \
-jar "$target" \
>> "$log_file" 2>&1 &
echo $! > "$PID_FILE"
log "시작 완료 (PID: $(cat "$PID_FILE"))"
}
main() {
ensure_paths
stop_app
backup_old
copy_new
start_app
log "배포 완료"
}
main "$@"