오타없이 배포 스크립트 짜기

HiroPark·2022년 12월 27일
0

문제해결

목록 보기
4/11

배포 스크립트를 만들어 서버를 돌리려고 하는데 permission denied가 뜬다

#! /bin/bash

REPOSITORY=/home/ec2-user/app/pjt
PROJECT_NAME=SpringBootboard

cd $REPOSITORY/$PROJECT_NAME/

git pull

echo "> project Build started"

./gradlew build

echo "> step1. move to directory"

cd $REPOSITORY

echo "> Copy Build file"

chmod u+x $REPOSITORY/$PROJECT_NAME/build/libs/*.jar

cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSIOTRY/

echo "> Check Currently Running application's PID"

CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

echo "> PID of currently running application: $CURRENT_PID"

if [ -z "$CURRENT_PID" ]; then
        echo ">no currently running application, not quit"
else
        echo "> kill -15 $CURRENT_PID"
        kill -15 $CURRENT_PID
        sleep 5
fi

echo "> deploy new Application"

JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"

nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &

jar은 build/libs에 있고, 해당위치에서 실행하면 서버는 켜지는데(DB연결 없어서 에러는 뜬다), 쉘스크립트로 실행하면 권한에러 발생

그니깐, deploy.sh 는 유저에게 모든 권한은 열어줬는데.

libs안의 jar파일들은

-rw-rw-r-- 1 ec2-user ec2-user 101267102 Dec 27 15:25 SpringBootboard-1.0.4-SNAPSHOT-20221227152508.jar

라 유저에게 실행권한(X)가 없어서 그런거 아닌가라고 생각이 들었다

그러면 이 libs안의 jar들에게 x를 열어주면 되는거 아

그래서 libs 안에서

chmod -R u+x .

로 user에게 실행권한 주려했는데

chmod: changing permissions of ‘./SpringBootboard-1.0.4-SNAPSHOT-20221227151232.jar’: Operation not permitted

불가능하다고 한다

  • sudo 붙여서 다시 실행권한 주었다

다시 ./deploy.sh 실행해보면??

  • cp: cannot create regular file ‘/SpringBootboard-1.0.4-SNAPSHOT-20221227153746.jar’: Permission denied

여전하다

아 새로 생기는 jar 파일은 여전히 x 권한이 없구나(새로 생긴 맨 밑 jar 스냅샷 파일만 빨간색)

echo "> Copy Build file"

chmod u+x $REPOSITORY/$PROJECT_NAME/build/libs/*.jar

cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSIOTRY/

로 libs안의 jar파일들에대해 유저의 실행권한 주었으나..

chmod: changing permissions of ‘/home/ec2-user/app/pjt/SpringBootboard/build/libs/SpringBootboard-1.0.4-SNAPSHOT-20221227151232.jar’: Operation not permitted

여전히 에러…

=> cp커맨드가 원본에 대한 실행권한 요구하지 않으므로 의미없는 일이었다

자세히 확인해보니 jar 파일 중 하나가 소유자가 root 이다

삭제해줬으니 이제는 될줄 알았는데,

여전히 똑같은 문제..

? 루트폴더를 확인하니 jar이 여기 복사돼있다

뭔가 CP가 잘못된 듯하다.

bash -x 로 디버깅을 해보았으나 CP의 상세한 동작까지는 보여주지 않았다

아….

cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSIOTRY/

REPOSIOTRY 오타때문에 루트로 계속 복사되려 했던것이다...

하루 종일 고민했는데 조금 허무한 결과다

어쨌든, 그 다음 에러인

./deploy.sh: line 42: JAR_NAME: command not found

를 해결해보자…

이거는

  • JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
  • JAR_NAME =$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)

띄어쓰기 차이였다.. 변수명과 =을 붙여주니 색깔이 변하면서 옳게 수정됐다.

profile
https://de-vlog.tistory.com/ 이사중입니다

0개의 댓글