Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[node.js] 죽은 앱 꾸준히 살려주기 - forever Computer & Program

서비스는 언제든 끊이지 않고 제공되어야 한다. 하지만 프로세스는 시간이 흐를수록 문제가 생기기 마련이다. 서비스를 위해 여러 프로세스가 동시에 서비스를 하겠지만, 동접이 많으면 힘들 수도 있다. 때문에 프로세스가 죽으면 바로바로 띄워줄 수 있는 녀석이 필요하다.

node.js를 쓴다면 forever가 그런 역할을 해줄 수 있다. forever는 다른 프로세스 관리 도구들과 마찬가지로 프로세스를 관리하는 부모 프로세스가 시작된다. 그리고 그 프로세스는 꾸준히 서비스 프로세스를 확인하고, 프로세스가 죽거나 문제가 생기면 새로운 프로세스를 띄워준다.

사용법은 아주 간단하다. 아주 간단한 웹서버를 만든다.
var http = require('http');

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('OK');
});
server.listen(3000);
console.log('Server is started on port 3000');

그냥 실행시키면 이렇게 시작한다.
$ node app
Server is started on port 3000

그리고 forever를 설치하고 실행시켜보자.
$ npm install forever -g
  ...
$ forever app.js
Server is started on port 3000

이 상태에서 다른 터미널로 프로세스를 확인하면 아래처럼 2개의 프로세스가 떠 있는 것을 볼 수 있다. 그리고 부모 프로세스를 죽이지 않는 이상 프로세스는 꾸준히 새로 시작될 것이다.
$ ps -ef | grep node
501 676 542 0 9:01PM ttys002 0:00.00 grep node
501 659 561 0 8:58PM ttys003 0:00.42 node [npm_home]/bin/forever app.js
501 660 659 0 8:58PM ttys003 0:00.07 [npm_home]/bin/node [project_home]/app.js
$ kill 660
$ ps -ef | grep node
501 676 542 0 9:01PM ttys002 0:00.00 grep node
501 659 561 0 8:58PM ttys003 0:00.42 node [npm_home]/bin/forever app.js
501 687 659 0 9:03PM ttys003 0:00.08 [npm_home]/bin/node [project_home]/app.js
$ kill 687
$ ps -ef | grep node
501 676 542 0 9:01PM ttys002 0:00.00 grep node
501 659 561 0 8:58PM ttys003 0:00.42 node [npm_home]/bin/forever app.js
501 692 659 0 9:04PM ttys003 0:00.08 [npm_home]/bin/node [project_home]/app.js
$

이렇게 계속 프로세스를 죽이면 forever 명령을 실행한 터미널에는 이렇게 출력되고 새 프로세스가 시작될 것이다.
$ forever app.js
Server is started on port 3000
Forever detected script exited with code: 1
Forever restarting script for 1 time
Server is started on port 3000
Forever detected script exited with code: 1
Forever restarting script for 2 time
Server is started on port 3000



자.. 그러면 이제 forever를 실서비스처럼 백그라운드로 실행시켜보자. start, stop과 같은 실행 옵션을 주면 된다.
$ forever list
info: No forever processes running
$ forever start app.js
info: Forever processing file: app.js
$ forever list
info: Forever processes running
data: uid command script forever pid logfile uptime
data: [0] zxeo [npm_home]/bin/node app.js 735 736 [user_home]/.forever/zxeo.log 0:0:0:21.102
$ forever restart 0
info: Forever restarted process(es):
data: uid command script forever pid logfile uptime
data: [0] zxeo [npm_home]/bin/node app.js 735 736 [user_home]/.forever/zxeo.log 0:0:0:25.315
$ forever list
info: Forever processes running
data: uid command script forever pid logfile uptime
data: [0] zxeo [npm_home]/bin/node app.js 735 741 [user_home]/.forever/zxeo.log 0:0:0:8.997
$ forever stop 0
info: Forever stopped process:
data: uid command script forever pid logfile uptime
[0] zxeo [npm_home]/bin/node app.js 735 741 [user_home]/.forever/zxeo.log 0:0:0:18.706
$ forever list
info: No forever processes running

이외에도 몇 번까지만 프로세스를 살릴 것인지, 로그 경로는 어디인지 등등 많은 옵션이 있다. 자세한건 usage나 help 명령 참조 :D
그리고 forever-monitor를 사용하면 프로세스가 죽거나 새로운 프로세스가 실행될 때 내가 원하는 동작을 할 수 있게 설정할 수도 있다.

덧글

댓글 입력 영역

Google AdSense (text/image)