본문 바로가기

Develop/AWS

[AWS] Code Deploy시 Script at specified location: scripts/deploy.sh failed to close STDOUT 에러

반응형

저는 간단한 개인 프로젝트에서 code deploy를 사용하여 배포하고 있습니다.

프로젝트 배포 flow

그런데 code deploy에서 계속 배포 실패가 되었습니다. 에러 로그는 "Script at specified location: scripts/deploy.sh failed to close STDOUT", 즉 표준 출력이 제대로 닫히지 않고 있다는 거죠.

에러 로그

원인

원인은 말 그대로 표준 출력이 제대로 닫히지 않고 있어서였습니다. 저는 배포 시에 로그를 기록하기 위해 아래와 같은 명령어를 사용하고 있었습니다.

nohup java -jar $REPOSITORY/$JAR_NAME &

이렇게 되면 nohup 명령어로 백그라운드 프로세스를 실행하면서, 표준 출력 및 표준 에러를 제대로 리다이렉션을 하지 않게 되어서입니다.

해결

아래와 같이 명령어를 변경해주었습니다.

nohup java -jar $REPOSITORY/$JAR_NAME > /home/ec2-user/app/nohup.out 2>&1 &

위 명령어는 표준 출력과 표준 에러를 /home/ec2-user-app/hohup.out으로 리다이렉션해줍니다.
이때 2>&1은 리다이렉션을 할 때 사용되는 쉘 명령어 구문입니다.
Unix 계열 OS에는 모든 입출력은 파일 디스크립터를 통해 이루어지는데, 0,1,2는 각각 표준 입력, 표준 출력, 표준 에러를 뜻합니다.

2>&1는 표준 에러를 표준 출력과 같은 곳으로 리다이렉션하라 라는 의미입니다.

 

명령어를 수정해서 다시 배포하니 성공하네요. 파이프라인이 잘 작동하면 괜히 뿌듯합니다.ㅎ

반응형