관리 메뉴

가끔 보자, 하늘.

nodejs 앱 자동 실행 설정 본문

개발 이야기/개발 및 서비스

nodejs 앱 자동 실행 설정

가온아 2023. 11. 17. 12:16

nodejs로 개발된  앱들을 관리하는데 pm2 는 꽤 편리한 툴입니다. 특히나 마이크로 서비스로 개발된 앱들은 역할이 분명하고 특수한 임무만을 수행하기 때문에 보수할 일이  거의 없기도 합니다. 저도 9년전에 만들어 둔 서비스를 아직 그대로 쓰는 경우도 있습니다. 각종 보안 업데이트 문제로 코드 수정이 된 적은 있으나 임무 자체가 변경되지는 않으니까요.

그러다보니 OS를 재시작 될 경우 하나하나 재실행하기 번거롭게, 내가 아닌 다른 사람이 OS를 재시작 하는 문제라도 발생하면 문제가 될 수도 있습니다. 이런 경우에 대한 해답이 바로 "pm2 startup 스크립트"입니다.

그냥 service로 해당 스크립트를 바로 실행할 경우 혹시라도 버그로 다운된다면 재실행 안되는 문제가 있습니다. 그렇다고 pm2 start your_app.js 을 service에 등록하면 pm2 특성상 실행 후 종료되므로 serivcectl status로 보면 항상 inactive로 표기되어 service로 관리하는 의미도 없어집니다. 그래서 pm2 startup 스크립트를 사용해 관리하는 방법이 가장 좋습니다. 

pm2를 설치했다고 startup 스크립트를 바로 사용할 수 있는게 아니고 이를 service에 등록하는 절차가 필요합니다.

$ pm2 startup -u your_account --hp /home/your_account# 이렇게 실행하면 아래와 같은 내용이 출력됩니다.

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u your_account --hp /home/your_account

배포판에 따라 출력되는 결과가 다를 수 있습니다. 위 결과는 debian 계열의 ubuntu에서 실행한 내용입니다. 위 출력 내용 중 "udo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u your_account --hp /home/your_account" 을 복사해서 별도로 실행해야 합니다. (your_account는 사용하시는 계정명으로 대체해야 합니다.)

그러면 pm2 -ubuntu라는 service가 등록되고 이를 시스템 시작 시 실행할 수 있도록 아래와 같이 실행합니다.

$ sudo systemctl enable pm2-ubuntu

이제 pm2-ubuntu라는 서비스가 시스템 시작 시 실행됩니다. 이 서비스가 pm2 에 등록된 앱들을 시스템 시작 시 관리하는 서비스라고 보시면 됩니다. 

이제 사용하는 앱들을 startup에 등록합니다. 현재 실행이 안되어 있다면 먼저 실행하세요.

# 여기서는 당신의 계정 home 디렉토리에 apps라는 폴더안에 daemon_a.js라는 스크립트를 실행한다고 가정합니다. 

$ pm2 start /home/your_account/apps/daemon_a.js

필요한 서비스가 모두 정상적으로 실행되었다면 현재 내용을 저장합니다. 

$ pm2 save # 현재 서비스 중인 스크립트를 모두 저장해 시스템 시작 시 실행할 수 있게 저장합니다.

만약 제거하고 싶은 앱이 있다면 서비스를 중지 후 다시 pm2 save를 실행하면 됩니다.

상세한 옵션에 대해서는 pm2 메뉴얼-startup script 페이지를 참고하세요.

 

CentOS(redhat 계열)에서 Ubuntu(debian 계열)로 넘어오고 나니 자잘한 작업들이 자꾸 생기네요. 귀찮...

연말이네요. 모두 행복한 연말되세요. :)

반응형