|
2 | 2 | set -e |
3 | 3 |
|
4 | 4 | APP_DIR=/home/ec2-user/app |
| 5 | +cd "$APP_DIR" |
5 | 6 | JAR_PATH=$(ls $APP_DIR/*.jar | grep -v plain | head -1) |
6 | 7 | echo "> JAR 파일: $JAR_PATH" |
7 | 8 |
|
|
16 | 17 | fi |
17 | 18 |
|
18 | 19 | echo "> 애플리케이션 시작" |
19 | | -nohup java -jar \ |
| 20 | +OTEL_AGENT_JAR=$APP_DIR/grafana-opentelemetry-java.jar |
| 21 | +OTEL_ENV_FILE=$APP_DIR/otel.env |
| 22 | +JAVA_AGENT_OPTS="" |
| 23 | +if [ -f "$OTEL_AGENT_JAR" ] && [ -f "$OTEL_ENV_FILE" ]; then |
| 24 | + echo "> Grafana OTel agent 감지, 모니터링 활성화" |
| 25 | + set -a |
| 26 | + source "$OTEL_ENV_FILE" |
| 27 | + set +a |
| 28 | + JAVA_AGENT_OPTS="-javaagent:$OTEL_AGENT_JAR" |
| 29 | +else |
| 30 | + echo "> Grafana OTel agent 미설정, 모니터링 없이 실행" |
| 31 | +fi |
| 32 | + |
| 33 | +LOG_FILE=/home/ec2-user/app/nohup.out |
| 34 | +START_LINE=$(wc -l < "$LOG_FILE" 2>/dev/null || echo 0) |
| 35 | + |
| 36 | +nohup java $JAVA_AGENT_OPTS -jar \ |
20 | 37 | -Duser.timezone=Asia/Seoul \ |
21 | 38 | $JAR_PATH \ |
22 | | - >> /home/ec2-user/app/nohup.out 2>&1 & |
| 39 | + >> "$LOG_FILE" 2>&1 & |
| 40 | +APP_PID=$! |
| 41 | +echo "> 프로세스 시작됨 (PID: $APP_PID)" |
23 | 42 |
|
24 | | -echo "> 15초 후 헬스체크 시작" |
25 | | -sleep 15 |
| 43 | +echo "> 앱 준비 신호 대기 중 (최대 240초, 프로세스 생존 여부로 실패 판단)" |
| 44 | +MAX_WAIT=240 |
| 45 | +ELAPSED=0 |
| 46 | +READY=false |
26 | 47 |
|
27 | | -for i in {1..10}; do |
28 | | - RESPONSE=$(curl -s http://localhost:8080/actuator/health || true) |
29 | | - if echo "$RESPONSE" | grep -q '"status":"UP"'; then |
30 | | - echo "> 헬스체크 성공" |
31 | | - break |
32 | | - fi |
33 | | - echo "> 헬스체크 실패($i/10): $RESPONSE" |
34 | | - if [ $i -eq 10 ]; then |
| 48 | +while [ $ELAPSED -lt $MAX_WAIT ]; do |
| 49 | + if ! kill -0 $APP_PID 2>/dev/null; then |
| 50 | + echo "> 프로세스가 예기치 않게 종료됨 (크래시)" |
| 51 | + echo "> 최근 로그:" |
| 52 | + tail -n 40 "$LOG_FILE" |
35 | 53 | echo "> 배포 실패" |
36 | 54 | exit 1 |
37 | 55 | fi |
38 | | - sleep 10 |
| 56 | + |
| 57 | + if tail -n +"$((START_LINE + 1))" "$LOG_FILE" | grep -q "Started ServerApplication"; then |
| 58 | + echo "> 앱 준비 완료 신호 감지 (${ELAPSED}초 소요)" |
| 59 | + READY=true |
| 60 | + break |
| 61 | + fi |
| 62 | + |
| 63 | + sleep 2 |
| 64 | + ELAPSED=$((ELAPSED + 2)) |
39 | 65 | done |
40 | 66 |
|
| 67 | +if [ "$READY" != "true" ]; then |
| 68 | + echo "> ${MAX_WAIT}초 내에 준비 신호 없음 — 안전장치 발동" |
| 69 | + echo "> 최근 로그:" |
| 70 | + tail -n 40 "$LOG_FILE" |
| 71 | + echo "> 배포 실패" |
| 72 | + exit 1 |
| 73 | +fi |
| 74 | + |
| 75 | +RESPONSE=$(curl -s --max-time 10 http://localhost:8080/actuator/health || true) |
| 76 | +echo "> 헬스체크 확인: $RESPONSE" |
| 77 | + |
41 | 78 | echo "> Nginx 시작" |
42 | 79 | sudo systemctl start nginx || true |
43 | 80 | sudo systemctl enable nginx || true |
|
0 commit comments