Server/Linux

[Ubuntu] 부팅시 Node.js 프로젝트가 자동 실행되도록 서비스 등록

범데이 2023. 2. 9. 12:11

개요

 

AWS EC2(Ubuntu) 인스턴스를 만들어 REST API 서버를 구축하여 사용하던 중,

가끔 서버에 렉이 발생해서 REST API가 응답하지 않을때가 있었다.

 

그래서 가끔 AWS 콘솔에서 인스턴스를 재부팅시켜줄때가 있었으나, 부팅 후 직접 진입해서 Node.js는 수동으로 실행시켜주는 작업을 계속 반복할수 없었으니.. 서비스로 등록하여 부팅시 자동으로 뜨도록 설정해놓고자 하였다.

 

 

 

구축 환경
  • Ubuntu 18.04
  • Node.js 14

 

 


1. 서비스 파일 작성

 

서비스를 등록하기에 앞서, node.js 프로젝트 폴더에

node.js 프로그램을 실행할 수 있도록 아래와 같이 간단한 쉘 스크립트를 만들어 주었다.

 

[start.sh]

node --loader ts-node/esm ./index.ts

 

 

그런 다음, /lib/systemd/system 경로에 (서비스이름).service 파일을 하나 만들어 아래 양식과 같이 작성하였다.

[Unit]
Description=(서비스 설명)

[Service]
ExecStart=(실행할 명령어)
User=(유저이름)
WorkingDirectory=(작업 경로)
Restart=on-failure

[Install]
WantedBy=multi-user.target

 

(아래는 실제 작성 예제이다.)

[Unit]
Description=This is REST API service.

[Service]
ExecStart=/bin/sh /home/user/sample-project/start.sh
User=user
WorkingDirectory=/home/user/sample-project
Restart=on-failure

[Install]
WantedBy=multi-user.target

 

 

편집한 서비스 설정파일을 반영하기위해 다음 명령어를 입력해준다.

sudo systemctl daemon-reload

 

 

 

2. 서비스 확인

서비스를 실행한 뒤, 

sudo systemctl start (서비스이름)

서비스를 확인해보았다.

sudo systemctl status (서비스이름)

서비스가 잘 등록되었음을 확인할 수 있으나, disabled상태임을 확인할 수 있다.

이를 부팅시에도 자동 활성화되도록 enable상태로 변경해주자.

 

sudo systemctl enable (서비스이름)

 

 

그 후 다시 서비스 상태를 확인해보면 다음과 같이 enabled상태가 되었음을 확인할 수 있다.

 

 

 

아래 명령어로 서버를 재시작 한 후,

shutdown -r now

 

다시 서비스 상태를 확인해봤을때 위와같이 정상 동작하면 성공이다.

 

반응형