node js 포어그라운드(foreground)에서 실행

 

nodejs로 개발 하다 보면 보통 node app.js 명령어로 실행하는데 이는 foreground에서

실행 되기 때문에 터미널을 종료하면 같이 종료되는 문제가 발생.

 

 

 

node js 백그라운드(background) 실행 & forever CLI 도구(Command line interface) 사용

 

 > 백그라운드 실행

 

nodejs로 작성된 웹 서비스를 유지하기 위해 터미널 창을 매번 띄워 놓을 수도 없는 일.

이 같은 경우에 nohup 명령어를 사용하게 되면 사용자가 SSH 세션을 로그오프 해도 프로세스는

데몬 형태로 실행되기 때문에 지속적으로 실행되게 됩니다.

 

- nodejs 백그라운드 실행

nohup node server.js > app.log &

 

& 는 백그라운드 실행을 의미하고 출력파일은 app.log에서 확인 가능합니다.

nohup로 실행할 파일은 퍼미션 755 이상이어야 합니다.

 

- nodejs 프로세스 확인

ps -ef | grep node
root      72635  71903  0 11:02 pts/0    00:00:00 node server.js
root      72963  71903  0 11:07 pts/0    00:00:00 grep --color=auto node

ps -ef 를 통해 실행중인 프로세스 아이디를 확인해보면

72635이라는 ID로 실행 중임을 확인 할 수 있습니다.

 

- nodejs 프로세스 종료

kill -9 72635

종료는 kill process id : kill -9 {id}로 가능합니다.

 

 

- nodejs 프로세스 종료를 한줄로 실행하기

kill -9 $(ps -ef | grep node | awk '{print $2}')

 

$() 표현식은 내부에 위치한 명령을 실행하고 출력 값을 다음 명령에 대한 인수로 제공합니다.

이는 backquote key로 대체 하여 사용 가능합니다.

awk '{print $2}' 는 지정된 레코드로 부터 두번째 필드의 내용을 출력합니다.

 

 

 >  npm forever 모듈 사용(링크)

 

실제로 개발 & 서비스 환경에서 서버가 자꾸 내려가면 안 될 일.

따라서 forever 모듈을 사용해보았습니다.

 

$ sudo npm install forever -g

설치한 서버 인스턴스로 접근하여 npm 명령어를 사용, -g 옵션으로 global하게 forever모듈을 설치합니다.

 

$ sudo forever start server.js

sudo 명령어를 사용하여 서버를 구동해줍니다. (80포트가 root 계정에서 접근하기 때문)

 

$ sudo forever list

forever list 명령어를 사용하면 백그라운드에서 실행 중인 프로세스 정보를 확인 할 수 있습니다.

 

$ sudo forever stop 0

forever list 명령어로 확인한 uid(식별번호)가 0번이니 

sudo forever stop 0 명령어로 실행 중인 프로세스를 종료할 수 있습니다.