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 명령어로 실행 중인 프로세스를 종료할 수 있습니다.