해결된 질문
작성
·
183
1
- name: SSH(원격접속)로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
#env:
#APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }}
with:
#SSH로 접속할 때 필요한 값들이 있음. IP주소, ubuntu, 키페어 (EC2에 접속하기 위한 과정)
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
#envs: APPLICATION_PROPERTIES
#문제가 있으면 스크립트 중단.
script_stop: true
script: |
rm -rf /home/ubuntu/instargram-server/current
mkdir /home/ubuntu/instargram-server/current
mv /home/ubuntu/instargram-server/tobe/project.jar /home/ubuntu/instargram-server/current/project.jar
cd /home/ubuntu/instargram-server/current
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
rm -rf /home/ubuntu/instargram-server/tobe
스크립트에서 실행 순서에 대한 질문입니다.
기존에 있던 서버는 current 파일의 project.jar 로 실행되고 있었을텐데 current 파일을 먼저 날리고 기존의 서버를 종료시켜 주는 부분이 이해가 되지 않습니다.
아마도 제 생각에는 current 폴더 안의 project.jar로 실행되고 있던 8080포트의 프로세스가 current 폴더를 삭제해주면 에러가 생길 것 같은데 에러가 생기지 않는 이유가 궁금합니다. 프로젝트 종료 -> 프로젝트가 담겨있던 폴더 삭제 -> 새 프로젝트 폴더 생성 순으로 가야 할 것 같은데 기존 프로젝트 폴더 삭제 -> 새 프로젝트 폴더 생성 -> 프로젝트 이동 -> 기존 프로젝트 종료 -> 새 프로젝트 실행 이런 순서로 해도 에러가 안나는 이유가 궁금합니다. 두서없이 써서 죄송합니다 ㅎㅎ;
답변 1
2
안녕하세요 seohyeonjin787님!
충분히 궁금해하실 수 있는 부분으로 질문 잘 해주셨습니다!
스크립트의 순서는 말씀해주신 순서인 '프로젝트 종료 -> 프로젝트가 담겨있던 폴더 삭제 -> 새 프로젝트 폴더 생성 순'으로 작성하셔도 괜찮습니다!
그런데 위의 스크립트 코드도 정상적으로 작동하는 이유는,
실행하고 있는 프로젝트의 파일에 대한 내용이 컴퓨터 메모리에 이미 복사되어 올라가있기 때문이에요!
그래서 프로젝트의 원본 파일을 지우더라도 프로젝트의 파일 내용이 컴퓨터 메모리에 여전히 남아있는 상태이기 때문에 에러가 안 나고 여전히 정상적으로 서버가 실행되고 있는 것입니다.
위 설명 중에 이해 안 되시는 부분이 있다면 편하게 또 질문 남겨주세요:D