분명 deploy.sh에서 구동 중인 애플리케이션이 있을 경우 kill하도록 했는데 감지하지 못하는 현상이 나타났다.
8080 포트 사용 여부 확인하는 코드
netstat -ntlp | grep :8080
확인해 보니 8080 포트는 사용중이어서(구동 중인 애플리케이션이 있어서) 8080 사용중인 오류가 뜨는 것이었다.
kill -15 pid로 kill한 후 deploy.sh를 실행하니 잘 실행되어 구동 중인 애플리케이션을 감지하지 못해서 생기는 오류일 것이라고 생각했다.
원래 deploy.sh 코드
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step2
PROJECT_NAME=name
echo "> Build 파일 복사"
cp $REPOSITORY/zip/*.jar $REPOSITORY/
echo ">현재 구동 중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -fl mangopot | grep jar | awk '{print $1}')
echo ">현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo ">현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/*.jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
echo "> $JAR_NAME 에 실행권한 추가"
chmod +x $JAR_NAME
echo "> $JAR_NAME 실행"
nohup java -jar \
-Dspring.config.loaction=classpath:/application.properties,/home/ec2-user/app/application-RDS.properties \
-Dspring.profiles.active=RDS \
$JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
pgrep -fl mangopot을 해보니 구동 중인 프로세스 3개가 나왔고 그 중 하나의 이름이 java였다.
혹시나 하고 deploy.sh에서 grep jar를 grep java로 바꾸니 해결됐다.