Linux systemd 서비스 관리

Heechul Yoon·2021년 4월 17일
0

LOG

목록 보기
60/62

node.js 프로젝트를 배포하면서 도커를 사용해서 node.js 서버를 빌드하기로 했다.

도커이미지 파일을 작성하던 중, 데이터베이스 연결이 되지 않은 상태서 서버를 listen하는 명령어를 실행하니 일정 간격으로 데이터베이스 매니저가 connection요청을 계속 보내게 되어서 이미지 빌드가 수행되지 않고 loop에 빠지는 문제가 발생했다. 문제는 아래와 같다

데이터베이스 connection 시도의 timeout을 주는 것도 이 문제를 해결하기 위한 방법이 될 수 있겠지만, 일단 이미지 파일은 성공적으로 빌드해보고싶다는 생각에 서버를 데몬프로세스로 올리고 일단 이미지를 빌드하기로 했다

이를 위해서 운영체제에서 제공하는 systemd를 사용해서 운영체제에 서비스를 등록하고 관리하는 방법을 통해서 등록된 "서비스"를 데몬프로세스로 실행하는 방법을 알아보자

서비스 파일 등록

/etc/systemd/system/ 디렉토리에 서비스파일을 등록한다

위와같이 해당 디렉토리에는 이미 많은 .service파일이 등록되어있다

서비스파일을 하나 만든다
sudo vi toy.service

내용은 아래와 같다

  1 # vi /etc/systemd/system/toy.service
  2 
  3 [Unit]
  4 Description=Systemd Test Daemon
  5 
  6 [Service]
  7 Type=simple
  8 User=ubuntu
  9 ExecStart=/usr/bin/sudo  /User/heechul/TOY/src/bin/server.js
 10 
 11 [Install]
 12 WantedBy=multi-user.target

9 에서 정의해준 명령으로 서비스가 실행된다

서비스 등록

우선 데몬을 reload한다
sudo systemctl daemon-reload

sudo systemctl enable toy

서비스 시작

sudo systemctl start toy

서비스 상태확인

sudo systemctl status toy

실행이 실패했을 때의 상태를 확인할 수 있다

참고
리눅스는 환경변수를 등록하고 path이름 없이 실행파일 이름만 터미널에 입력해서 명령을 실행할 수 있다.
1. 명령어를 통해서 현재 등록된 환경변수들을 확인해보자

  • echo $PATH
  • > /home/ubuntu/.linuxbrew/bin:/home/ubuntu/.linuxbrew/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin/
    위와같이 :로 환경변수가 구분된다
  1. 내가 원하는 환경변수를 등록해보자
    node.js의 package manager인 npm의 환경변수를 등록해서 npm명령어 만 입력하면 npm이 실행되도록 해보자
  • 우선 npm실행파일의 위치를 확인한다 which npm
  • 그리고 환경변수를 해당 npm 파일이 있는 디렉토리의 환경변수를 등록한다 export PATH=$PATH:/usr/bin/
profile
Quit talking, Begin doing

0개의 댓글