봄날은 갔다. 이제 그 정신으로 공부하자

node.js로 웹서비스 만들기 (22. Compute Engine 재 시작시 서비스 자동 실행하기) 본문

학습

node.js로 웹서비스 만들기 (22. Compute Engine 재 시작시 서비스 자동 실행하기)

길재의 그 정신으로 공부하자 2023. 8. 25. 11:11

Compute Engine으로 VM 인스턴스를 생성하고 node.js로 웹서비스를 만들어서 띄우는 작업까지 완료하고 Cloud SQL 서버도 연동하고 Cloud Storage도 연동하고 작업하다보니 최소 하루에 한번은 웹서비스가 내려가 있는 것을 확인하게 되었습니다.

 

기본적으로  VM 인스턴스 이러저러한 이유로 재실행되면 웹서비스도 같이 자동으로 실행되어야 하므로, 

VM 인스턴스가 재실행되는 원인 분석은 차차 분석해보기로 하고...

 

우선 이번 글에서는 VM 인스턴스 재실행 시 node.js가 자동으로 재실행되도록 작업한 내용을 기록합니다.

 

이번에도 별것도 아닌걸로 2~3시간 정도 삽질 했네요. ㅠ_ㅠ

그 삽질 내용도 같이 기록합니다.

 

1. VM 인스턴스 재실행 시 호출되는 startup-script에 웹 서비스 실행에 필요한 내용 추가

VM 인스턴스 > 해당 VM 인스턴스를 클릭합니다.


상단 “수정” 버튼을 클릭합니다.

 

하단 “메타데이터” 섹션의 자동화 시작 스크립트 부분에 시작시 실행할 스크립트를 아래와 같이 작성하고 “저장” 버튼을 클릭합니다.

#! /bin/bash
cd project/myproject
npm run dev

 

* 마무리인 줄 알았으나... (여기부터 삽질)

이렇게 처리하고 확인을 위해 해당 VM 인스턴스를 중지 후 재실행 하면,

시작 스크립트에 추가한 코드가 실행되어 node.js 웹 서비스도 같이 실행되어야 하는데...

 

안되네요... ㅠ_ㅠ

 

왜 그럴까요? 역시 초보자한테 한번에 되는건 없나 봅니다.

여기저기 구글링해봅니다.

 

스타트업 스크립트 실행 결과를 로그로 볼때는 아래 명령어를 입력하면 볼 수 있다고해서 SSH로 접속해서 명령어를 입력해보니

$ sudo journalctl -u google-startup-scripts.service

아래와 같은 에러가 발생하고 있었네요. ㅠ_ㅠ

왜그럴까? node가 제대로 실행이 안되네요... 이거 잘 되는건데... 왜 이러지...

타이밍 문제인가? sleep도 추가해보고, chmod로 권한도 바꿔보고 root 폴더에 스크립트 파일을 만들고 해당 스크립트 파일을 실행 시키도록 바꿔도 보고, 이것 저것 삽질만 2시간 넘게하다가... 설마하는 생각에 startup-script를 아래와 같이 바꿔서 다시 실행하고 로그를 보니...

#! /bin/bash
cd project/myproject
ls -al

내 이럴줄 알았다...

 

"ls -al"로 출력된 결과를 보니 계정의 root가 아닌 인스턴스의 root 경로로 나오네요.. ㅠ_ㅠ

이제 원인을 알았으니 startup-script를 아래와 같이 다시 수정해 줍니다.

#! /bin/bash
cd home/<myaccount>/project/<myproject>
npm run dev

 

인스턴스를 중지 & 재실행 후 결과를 확인해보니 잘 동작하고 실행 스크립트 로그도 에러없이 정상적으로 보여집니다.

 

진짜 마무리

startup-script로 실행 시에는 계정의 root가 아닌 vm 인스턴스의 root부터 시작이니 주의해야 함.

그리고 로그에 답이 있다!!! 로그를 잘 보자~~~

 

Comments