NodeJS / Process management
nodejs app을 단일 node
명령으로 실행후 백그라운드 혹은 시스템 데몬으로 다룰 수 있도록 해주는 프로세스 관리 유틸리티를 알아보자:
- nodemon
- pm2
- forever
1. nodemon
1 | nodemon ./server.js localhost 8080 |
express app
nodemon으로 express 의 기본 템플릿을 시작시 bin/www 를 실행애 주어야 한다. app.js 만 실행시 www 에 명시한 포트가 인식 안된다.
1 | $ nodemon bin/www |
혹은 PORT 변수를 입력하고 실행한다.
1 | $ PORT=3000 DB_USERNAME='mongo' DB_PASSWORD='' DB_SERVER='localhost' DATABASE='student' nodemon server.js |
2. pm2 설치
pm2는 nodejs app을 실행하고 관리할 수 있는 전문적인 도구이다.
node.js 앱을 시스템 서비스로 등록하기 위해서 pm2 를 설치한다.
1 | npm i -g pm2 |
예를 들어 express 앱이 있으면 다음 같이 pm2로 시작한다.
1 | cd www-app |
pm2 log format
pm2 이전 버전은 시작시 timestamp를 로그에 저장하고 싶으면 시작시 --log-date-format
옵션을 이용
1 | pm2 start app.js --log-date-format 'DD-MM HH:mm:ss.SSS' |
시작 설정 파일에 log_date_format
옵션을 줄 수 있다.
1 | "log_date_format" : "DD-MM HH:mm:ss.SSS", |
pm2 2.x 이후 부터는 log 의 형식을 --format
옵션을 지정할 수 있다.
1 | pm2 logs --format |
pm2 startup
startup 시 pm2 start 로 생성되는 .pm2 디렉토리의 pid 와 app.js 파일을 실행해 준다.
pm2 startup systemd 로 스타트를 하면 2개의 프로세스가 만들어 진다.
방법은,,,
- 먼저 앱을 시작해 둔다.
1 | pm2 start -n "www-app" bin/www |
- dump를 생성한다.
pm2로 현재 실행중인 프로세스 정보를 save
로 덤프하게 저장한다. systemd
서비스 스크립을 작성하는데 유용하다.
1 | pm2 save |
- pm2 startup 명령
pm2 startup
명령은 pm2로 실행중인 프로세스를 systemd 서비스 유니트 파일로 제어 할 수 있다. 명령을 실행하면 sudo
명령으로 실행할 수 있는 스크립을 출력해 준다.
1 | $ pm2 startup systemd |
이 스크립을 실행해 주면 pm2-foo.service 서비스 유니 파일이 생성된다.
1 | Target path |
이 서비스 파일을 활성화하고 시작해준다.
1 | systemctl enable pm2-foo |
이제 시스템을 재시작해도 pm2 로 실행중인 프로세스는 자동으로 시작된다.
3. forever
https://github.com/foreverjs/forever
백그라운드 로그 출력
nodejs app을 백그라운드로 실행하기 위해서 로그 정보를 생성할 수 있다.
The forever process will continue to run outputting log messages to the console.
1 | forever -o out.log -e err.log my-script.js |
Daemon으로 실행하기
forever 프로세스는 대상 프로세스를 백그라운드로 실행할 수 있는 데몬으로 동작이 가능하다. 이것은 nohup
같은 시스템 도구 없이도 가능다. 데몬 실행을 위해 -o -l, & -e 를 사용하도록 권장한다.
1 | $ forever start -l forever.log -o out.log -e err.log my-daemon.js |
그리고 -m
옵션으로 재시작 횟수를 지정할 수 있다.
here are several examples designed to test the fault tolerance of forever. Here’s a simple usage example:
1 | $ forever -m 5 examples/error-on-timer.js |
설정파일 지원
forever에 스크립트 경로와 함께 JSON 설정 파일을 전달해 스크립트의 구성요소를 제공할 수 있다. 예를 들어 아래 같은 앱 디렉토리에 developement.json
설정 파일이 있다고 하자,
1 | . |
developement.json
설정 파일은 아래 같은 내용으로 구성할 수 있다:
1 | // forever/development.json |
NodeJS / Process management
https://blog.thinkbee.kr/nodejs-processmanaging-90d48834639e/