본문 바로가기
사이드 프로젝트/To-do 캘린더 프로젝트

AWS 배포 스크립트 오류(2)

by Baley 2022. 8. 31.

1. 문제점: -.jar 파일 실행 시 Permission Denied

캡쳐1

https://catch-115.tistory.com/entry/AWS-%EB%B0%B0%ED%8F%AC-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%8B%A4%ED%96%89-%EC%98%A4%EB%A5%98

 

AWS 배포 스크립트 실행 오류

현재 사이드 프로젝트를 배포하면서 겪고 있는 문제. 책 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'에 따라 배포를 하고 있으나 책에 나온 예시와 사이드 프로젝트의 설정도 다르고 책이 나

catch-115.tistory.com

위의 포스팅을 통해 -plain.jar로 인한 'no main manifest attributes' 이슈를 해결했으나 역시 jar 파일이 실행되지 않는다.

책에 나온 배포 스크립트를 직접 한 줄 한 줄 실행하는데 nohup java -jar \ 부분에서  'Permission Denied'라는 에러가 뜬다. jar 파일을 실행할 권한이 없다는 것이다.

 

실행할 jar 파일이 있는 디렉토리에 ls -l 명령어를 입력하면 해당 디렉토리에 있는 파일/폴더와 파일/폴더에 대한 상세 정보를 알 수 있다.

캡처2

 ls -l을 입력 후에 나오는 파일/폴더명들 제일 앞에 있는 부분이 파일의 타입과 실행 권한을 의미한다.

맨 앞에 있는 문자가 - 이면 파일, d 일경우 디렉토리를 의미한다.

deploy.sh의 -rwxrwxr-x는 맨 앞이  - 이므로 deploy.sh가 파일이라는 것을 의미한다. 그 뒤에는 3자씩 파일 소유자 계정, 파일 소유자 그룹, 소유자와 소유자의 그룹을 제외한 그룹이 가지는 권한을 나타낸다.

자세한 설명은 아래 링크에서 찾을 수 있다.

https://whitewing4139.tistory.com/72

 

10. Linux - 파일 및 폴더 권한 및 소유주 지정하기

리눅스 내의 모든 파일과 폴더는 특정 계정과 그룹이 소유하고 있다. 그리고 파일과 폴더의 권한이 어떻게 부여되었느냐에 따라, 모든 계정이 해당 파일과 폴더에 접근할 수도 있고, 그렇지 못

whitewing4139.tistory.com

캡처 2를 통해 -. jar을 실행하는 권한이 소유자 계정에 없다는 것을 확인할 수 있다.

 

권한은 chmod 명령어를 통해 설정한다.

chomod +x [권한을 부여하고자 하는 파일명]

을 입력하면 실행권한을 추가할 수 있다.

 

chmod +x 를 입력한 후 다시 ls -l 명령어를 입력하면 -. jar 파일에 실행 권한이 추가된 것을 볼 수 있다. 더 이상 Permission Denied 에러는 나지 않는다. 

jar 파일 실행시 더 이상 Permission Denied 에러는 나지 않는다.

하지만 이번엔 cannot execute binary file이라는 에러가 뜬다.  대체로 cannot execute binary file는 OS의 비트 버전과 JDK의 비트 버전이 일치하지 않아 발생한다고 한다.

 

리눅스의 비트버전은 getconfig LONG BIT를 통해 확인한다.

getconfig LONG_BIT

JDK의 버전은 java --version을 통해 확인한다.

java --version

 

설치된 JDK 버전과 OS 버전을 확인해봤으나 64비트로 동일하다는 것을 확인했다. 그러므로 다른 원인이 있는 것 같은데 지금으로서는 build.gradle에 dependency 설정이 다소 중구난방으로 되어 있어서 dependency 간에 jar 파일의 호환성이 충돌 났을 가능성이 있다고 보고 build.gradle부터 천천히 다시 살펴보고자 한다.

 

댓글