PM2 간단한 사용법 및 유용한 팁

PM2 nodejs 서비스 처럼 실행하기

nodejs로 만든 서비스를 systemctl을 이용하지 않고 편하게 관리 할 수 있는 프로그램이 PM2이다. 단순하게 서비스처럼 실행만 되는 것이 아니라 모니터링이나 로그 관리 기능까지 있어서 편리한 기능이 많다.

여기에서는 간단하게 nodejs 프로젝트를 npm으로 관리할 경우 PM2에 등록하고 시스템 재시작 할때 자동 시작하도록 하는 방법을 설명할 것이다.

먼저 내가 만든 프로젝트를 npm으로 실행할때 매개변수를 그대로 활용할 것이다. 예를 들어

npm server

와 같이 npm으로 실행하는 경우 PM2에는 다음과 같이 등록할 수 있다.

pm2 start npm --name servername -- run server

이렇게 하면 pm2에 등록이 되고 리부팅 할 때 자동 재시작 하게 하려면

pm2 startup
pm2 save

라고 실행해 주면 된다.

서비스를 재 시작 하려면

pm2 restart all
# 또는
pm2 restart servername

와 같이 입력하면 된다.

중지 하려면 아래와 같이 한다.

pm2 stop all
# 또는
pm2 stop servername

PM2 로그파일 자동 관리

PM2를 사용하다 보면 로그 파일이 끝도 없이 길어진다. 주기적으로 삭제를 해도 되지만 귀찮은 일이기도 하고, 삭제하고 나면 기록을 찾아볼 일이 발생한다.

일정 간격으로 로그 파일을 기록하고 날짜별로 관리가 된다면 좋을거 같다는 생각에 찾아봤더니 해당 기능이 있었다. 바로 pm2-logrotate라는 모듈이다. 별도의 프로그램이 아니라 pm2에 모듈 형식으로 설치가 되는 보조 도구였다.

설치하기 전에 로그 폴더를 확인해 보면 다음과 같다.

ls .pm2/logs/

#(출력결과)
server-error.log  server-out.log

설치 방법은 아래와 같이 하면 된다.

pm2 install pm2-logrotate

설치가 완료되면 설치 정보가 표시된다.

Module: pm2-logrotate
$ pm2 set pm2-logrotate:max_size 10M
$ pm2 set pm2-logrotate:retain 30
$ pm2 set pm2-logrotate:compress false
$ pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
$ pm2 set pm2-logrotate:workerInterval 30
$ pm2 set pm2-logrotate:rotateInterval 0 0 * * *
$ pm2 set pm2-logrotate:rotateModule true

설정 값을 변경 하려면 다음과 같이 할 수 있다. (예시: 압축하기로 변경)

pm2 set pm2-logrotate:compress true

설정한 내역을 다시 보려면 아래와 같이 실행한다.

pm2 conf

rotateInterval 값은 cron 형식으로 기본값은 매일 0:00 마다 반복이다. 설정 값은 필요에 따라 수정하면 된다. 로그 파일의 양이 상황에 따라 다르기 때문에 사용하면서 값을 수정하면 된다.

설치 후 로그 폴더를 확인해 보면 다음과 같다.

ls .pm2/logs/
#(출력결과)
pm2-logrotate-error.log  pm2-logrotate-out.log  server-error.log  server-out__2022-12-06_16-25-41.log  server-out.log

server-out__2022-12-06_16-25-41.log 파일이 백업 파일이다.