2020-01-03 pm2

자주 사용하고 있는 pm2. 매번 사용하던 대로만 사용하고, 모르는 것은 동일한 내용을 매번 검색하고 있어, 한번 정리하고 넘어가려고 한다.

PM2 is a daemon process manager

PM2를 사용하는 가장 큰 이유는 내가 만든 프로그램을 daemon으로 만드는 것이고, 두 번째는 예상치 못한 오류가 발생하여 process가 중단되었을 때 자동으로 재시작하는 것이다.

자주 사용하는 것

공식 페이지에 보면 사용법과 간단한 옵션을 설명한다.

자주 사용하는 것을 추려보자.

pm2 start app.js

pm2 list 등에서 확인할 수 있는 이름을 설정

--name <app_name>

파일이 변경되면 다시 시작. 사용해본 적이 없다;

--watch

정확하게 어떤 메모리를 얘기하는지는 잘 모르겠다. 이전 프로젝트 때 SSR이 적용된 front 프로그램이 메모리 leak이 발생해 시간이 지나면 서버가 다운되는 증상이 발생했었는데, 그 때 잘 써먹었다. 기억해두자.

--max-memory-restart <200MB>

이런 식으로 사용한다.

pm2 start app.js --max-memory-restart 200M

로그 파일 생성. 로그는 다시 설명한다.

--log <log_path>

script에 인자 전달하는 방법. 기억해두자. 종종 사용한다.

-- arg1 arg2 arg3

ecosystem

CLI 방식으로만 사용하는 것이 아니라 batch file 처럼 실행 내용을 정의해두고 실행하는 방식도 있다. 아직까지는 package.json의 script에 다 처리할 수 있어서 사용해보지는 않았다.

js, yaml 형식 등을 활용할 수 있다.

js 포멧

module.exports = {
  apps: [
    {
      name: 'app',
      script: './app.js',
      env: {
        NODE_ENV: 'development',
      },
      env_production: {
        NODE_ENV: 'production',
      },
    },
  ],
};

yaml 포멧

apps:
  - script: ./api.js
    name: 'api-app'
    instances: 4
    exec_mode: cluster
  - script: ./worker.js
    name: 'worker'
    watch: true
    env:
      NODE_ENV: development
    env_production:
      NODE_ENV: production

다음과 같이 실행한다.

pm2 start ecosystem.config.js

production 모드로 실행

pm2 start ecosystem.json --env production

현재 구성

현재는 package.json 파일의 script를 활용하고 있다.

"start": "NODE_ENV=production pm2 start ts-node -- src/index.ts && pm2 monit",

--를 사용하여 args를 표현한다.


Written by@[Suho]
뭐든지 만들어보자.