화난다.
210907 어떻게 하면 해결될까?
사건의 발단: ec2로 서비스 중인 express 서버를 인스턴스에서 로그아웃 해도 돌아가게 하고 싶다. 당연함. 서버 돌리려고 aws 계속 켜놔야 하면 로컬에서 돌리는거랑 다른게 없잖아.
[ npm ] nohup
foreground에서 돌아가는 서버를 background로 돌리는 법은 간단하다.
nohup {서버 실행 명령어} &
하면 됨.
예를 들면 nohup node server.js &
.
근데 나는 npm을 이용해서 nohup npm start &
함.
근데 안되더라? 왜인지 궁금해서 nohup.out
파일을 확인해봤다.
nohup.out
은 프로그램을 포어그라운드로 실행 시 커널에 출력 될 메세지들을 백그라운드로 실행했을 때도 나중에 볼 수 있도록 모아놓는 파일이다.
sh: nodemon: command not found
nodemon
을 찾을 수 없단다.
[ npm ] nodemon
nodemon
은 파일이 바뀔 때마다 감지해서 node를 자동으로 재시작 해주는 라이브러리다.
사용법도 간단해서, node server.js
로 실행하던 서버를
nodemon server.js
로 실행해주면 끝이다.
환경 셋팅은 이미 끝난 상황인데 대체 왜 멀쩡히 설치되어 있는 nodemon
을 인식하지 못하는지 분통이 터졌지만, 세상은 넓고 구글은 신이다. 이미 같은 상황을 겪은 분들이 계셨다. 친절한 설명 감사합니다.
근데 난 저래도 안되더라. 이유가 궁금해서 처음으로 돌아가기로 했다.
node server.js
역시, 안되더라. 기존에 사용하던 포트~~임의로 56번이라 하자.~~가 안열려있대.
[ AWS EC2 / linux ] port 열기
EC2 인스턴스 위에 올라간 linux 서버에서 외부와 통신을 하려면, 다음과 같은 과정을 거쳐야 한다. 아래 과정을 하도 반복해서 정확하지 않을 수 있음 / Cent OS 7이상은 다른 문법을 사용함 주의
- EC2 보안그룹 Inbound 포트 확인
- 방화벽 열려있는지 확인 2-1. 포트 LISTEN 상태인지 확인
netstat -nlpt
ps -ef
2-2. 누군가 이미 사용 중인 포트라면 PID를 확인해서 죽이기 port 번호로 PID 확인:netstat -nlpt|grep {port 번호}
PID로 프로그램 죽이기:kill -9 {PID}
2-3. 아무도 사용하지 않고 LISTEN 상태가 아니라면 방화벽 열어주기iptables -I INPUT 1 -p tcp --dport {port 번호} -j ACCEPT
나는 LISTEN 상태도, 누가 포트를 사용하고 있는 상태도 아니었는데 위의 과정을 아무리 반복해도 LISTEN 상태의 56번 포트를 만날 수 없었다. 그래서 포트를 열었다가 죽였다가 해서 미지의 선점자로부터 포트를 빼앗아왔다. 그런데 금방 다시 원상태로 돌아가는 일이 반복되었고, 결국은 다른 포트를 사용하는 것으로 해결했다.
오늘의 교훈: 왠만하면 default로 설정되어 있는 포트를 이용하자. 다들 많이 쓰니까 해결법 찾기도 쉽다.
번외: EC2 인스턴스 선택하기
삽질을 하다보니 처음 인스턴스를 만들 때 어떤 옵션을 선택해야 하나 고민했던 기억이 났다. 결론적으로 말하자면, 왠만하면 ubuntu나 cent OS 쓰세요. 당연히 프리티어를 기준으로 하는 말이지만, 사람들이 익숙한 windows를 안쓰고 linux를 선택하는데는 다 그만한 이유가 있는 법이다. 가뜩이나 공짜폰보다도 못한 최저사양인데, windows는 리소스를 너무 많이 잡아먹어요. GUI를 사용할 수 있다는 장점이 있지만, 인터넷 접속 할 것도 아닌데 어차피 cmd 쓸거면 그게 왜 필요할까요? linux 중에서는 레퍼런스 얼마 없는 Amazon linux보다는 WSL도 되는 ubuntu나 가장 범용적으로 쓰는 Cent OS가 낫다고 생각합니다.
결과적으로 다른 포트를 사용하고, nohup
을 이용하지 않고 해결했다. 아마 기존에 인수인계 받지 않은 부분에 따로 백그라운드 실행 설정이 들어가 있는 모양이다. 나중에 확인해 봐야지.
내일이나 모레 중으로 확인 해보고, github hook 설정도 마무리 해야겠다.
댓글남기기