EC2 스크립트 쉘 레벨 문제

2024년 9월 11일 수요일

Today I Learned

날짜

2024년 9월 11일 수요일

내용

실서버 배포 여정

진행중인 인스타그램 기능을 실서버에 우선 올리기로 했다. 새 서비스로 사용자가 없는 서비스라 별 문제는 없을 듯 싶다. 데이터베이스 구조가 변경되어 마이그레이션이 필요했기 떄문에 실서버 코드가 반영된 EC2에 접속했다. 근데 터미널 bash창에 커서도 안뜨고 이런 오류가 계속 나타난다.

1
2
3
/usr/bin/sh: warning: shell level (1000) too high, resetting to 1
/usr/bin/sh: warning: shell level (1000) too high, resetting to 1
bash: warning: shell level (1000) too high, resetting to 1

쉘 레벨이 너무 높다는 경고라고 한다. 호출이 지나치가 많다는 의미인데, 쉘이나 스크립트에서 무한재귀에 빠졌을 때 발생하는 오류 메시지라고 한다.

이게 1분 정도 간격으로 2~3번 나타나더니 EC2 연결이 끊긴다. 인스턴스 상태를 확인해보면 CPU 이용률이 100%로 치솟아서 터져있는 상태다.. 재부팅하고 다시 연결해봐도 위와 같은 상황이 반복되서 EC2 내에서 아무것도 할 수가 없었다.

명령어를 처리중일 때 처럼 커서가 나타나지 않아 터미널에 입력을 할 수가 없는 상황이라 뭐 아무것도 할 수가 없었다. 터미널 초기화도 안되서 이것저것 시도해보다 control + C 를 눌러 실행중인 상태를 종료시켰다.

백그라운드에서 돌아가고 있는 컨테이너가 문제인듯 했다. 찾아본 바로는 Docker Compose 파일이나 도커파일에서 무한루프가 걸렸나싶어 Dockerfile 가장 아래 코드를 삭제했다.

1
2
# 삭제한 코드
CMD ["gunicorn", "src.main:app", "--workers", "2", "--worker-class", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:80"]

그랬더니 이 문제는 해결됐다.

서버가 돌아가고 있는 ECS를 확인해보니, 새로운 코드로 실행된 태스크가 바로 종료되고 있었다. 기존 서버가 죽고 새로운 서버가 돌아가야 하는데, 새로운 서버는 별다른 로그나 오류 메시지도 없이 시작되자마자 종료되었다. 혹시나? 싶어 위 코드를 다시 살려 메인 브랜치에 병합해주었더니 잘 돌아간다. 혹시나 싶어 EC2로 다시 돌아가서 확인해보니 이번엔 아무 문제 없이 잘 돌아간다. 결국 바뀐건 아무것도 없는데 해결되었다;

페북 검수

페이스북에 앱 검수 요청을 보냈다. 내가 보낸 스크린캐스트 상으로는 타당한 요청으로 보이는데, 내가 첨부한 자료로 그 스크린캐스트를 따라할 수 없다고 했다. 테스트 계정 정보를 포함해야 하는데, 실수로 다른 계정을 첨부해버렸다. 이 부분만 수정해서 다시 제출했다.

갑자기 다음 날, 내가 보낸 요청이 타당하지 않아서 승인해줄 수 없다고 한다. 테스트를 위한 계정 정보는 바꾸어주고 스크린캐스트는 그대로였는데 갑자기 타당하지 않댄다. 뭘 도대체 어떻게 바꿔야하나 싶어서, 혹시나 하는 마음으로 그대로 보냈다.

그리고 다음날, 승인해주었다. 난 페북이 정말 싫다.

회고

아오 페북시치