리셋 되지 말자

패키지 매니저와 PM2 본문

NodeJS/생활코딩

패키지 매니저와 PM2

kyeongjun-dev 2020. 9. 9. 16:47

PM2

nodejs process가 구동중일 때, 예기지 못하게 동작이 중지되는것을 방지하여 process가 꺼지면 다시 실행시켜줌.

프로그램이 수정되는것을 관찰하고 있다가, 프로그램이 수정되면 process를 자동으로 껏다가 켜주는 역할을 함

 

npm으로 PM2 설치

npm install pm2 -g

-g 옵션은 설치하는 sw가 독립적이라서 어디에서든 실행될 수 있다라는 옵션

 

PM2로 main.js 실행

pm2 start main.js

 

  • 실행한 화면
                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=C:\Users\rudwn\.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting C:\VSCodeFiles\JS\nodeJS_OpenTutorial\OpenTutorial\main.js in fork_mode (1 instance)
[PM2] Done.
┌─────┬─────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐     
│ id  │ name    │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │     
├─────┼─────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤     
│ 0   │ main    │ default     │ N/A     │ fork    │ 23388    │ 0s     │ 0    │ online    │ 0%       │ 26.9mb   │ rudwn    │ disabled │     
└─────┴─────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘     

localhot로 접속하면 똑같이 접속이 된다.

 

PM2 사용해보기

pm2 monit

pm2 monit 실행화면

main.js를 Process List에서 확인할 수 있다. 이 상태에서 작업관리자에서 강제로 종료를 해본다.

PID로 확인

PID가 23388인 걸 종료 해보록 해보겠다.

 

main Logs에 로그가 떠야하는데 왜 안뜨지...

어쨋든 강제종료를 하면, main.js가 목록에서 사라졌다가 다시 실행된다. (PID가 변경된것으로 재실행 된 사실을 알 수 있다.)

PID가 바뀜

process 목록을 보는 명령어는 pm2 list이다

PM2 프로세스 종료

pm2 delete 명령어

id 또는 name을 인자로 주어서 종료시킬 수 있다.(위는 id로 종료시킨 모습)

 

PM2 자동 리로드 기능

pm2 start main.js --watch

watch 옵션을 주어서 main.js를 실행한다.

WEB 이라고 표시는되는 부분을 WEB1로 표시되도록 에디터상에서 코드만 수정하고 저장을 한다.(웹서버 재시작 x)

페이지를 reload하면 main.js를 재시작하지 않았음에도 변경된 내용이 바로 반영된 모습이다.

 

PM2 로그 확인

node main.js 명령어로 실행했을 때, 뭔가 에러가 있으면 콘솔에서 바로 확인이 가능했는데, pm2로 실행하면 바로 확인이 불가능 하므로 아래의 명령어로 확인한다.

pm2 log

이상태에서 다시 WEB1을 WEB으로 변경하면, 

위와같이 log가 표시된다.

'NodeJS > 생활코딩' 카테고리의 다른 글

글생성 UI 만들기  (0) 2020.09.10
HTML-form  (0) 2020.09.09
동기&비동기  (0) 2020.09.09
글목록 출력하기  (0) 2020.09.09
파일목록 알아내기  (0) 2020.09.09
Comments