배포 스크립트를 만들어 서버를 돌리려고 하는데 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
불가능하다고 한다
다시 ./deploy.sh 실행해보면??
여전하다
아 새로 생기는 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
를 해결해보자…
이거는
띄어쓰기 차이였다.. 변수명과 =을 붙여주니 색깔이 변하면서 옳게 수정됐다.