109 lines
2.5 KiB
Bash
109 lines
2.5 KiB
Bash
|
|
#!/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 "$@"
|
||
|
|
|