자주 사용하고 있는 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
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를 표현한다.