작성한 Flask 서버를 부팅 시 자동으로 실행하기 위하여 service에 등록하기로 하였다.

 


Service이란

linux에서 서비스란 백그라운드에서 실행되며, 시스템이 시작할 때 동작하는 것을 의미한다.

그래서 주로 시스템과 관련된 프로그램이 서비스에 등록되어있으며,

서드파티 서비스들(nginx, mysql)은 사용자가 시스템이 시작할 때 작동 여부를 선택할 수 있다.

 

부팅 시 자동적으로 실행되길 원해 Flask 서버도 service등록하려고 한다.

 

 

Service  파일 생성

서비스에 등록을 하기위해서 service 파일을 작성해야 한다.

이번 서버의 service 파일이다. root 권한으로 작성한다.

 

옵션 전체를 설명하기에는 너무 많아 사용한 옵션들만 작성하였다.

service 섹션만은 반드시 필요하여,
나머지 unit, install 섹션은 작성하지 않아도 된다.

(참고 링크: https://manpages.ubuntu.com/manpages/focal/man5/systemd.service.5.html)

  • Unit: 유닛 명세
    • Description: service 설명,
    • After: 특정 서비스가 실행된 후 실행되도록 설정
  • Service: 동작
    • Type: simple로 ExecStart에서 호출한 프로세스를 main 프로세스라고 가정하고 실행된다.
      현재 실행시키는 프로그램이 메인이므로 simple으로 설정
    • User: 서비스(프로세스)를 실행시키는 유저
      현재 EC2 유저로 설정
    • WorkingDirectory: 서비스가 실행되는 경로
      flask 프로젝트 root 디렉토리
    • ExecStart: 서비스 실행 명령어
      gunicorn실행을 위해 python 명령어로 설정
      사용하고 있는 python의 경로는 which 명령어로 확인 가능하다.
    • Restart: 예기치 않게 종료되었을 때(에러) 다시 시작하는지 여부
      (no, always, on-success, on-failure, on-abnormal, on-abort, on-watchdog)
    • RestartSec: 다시 시작 전 대기하는 시간
      기본 100ms
  • Install: enable시 사용됨

 

 

Service  등록 방법

service는 ubuntu 20.04 기준 /usr/lib/systemd/system/ 아래에 서비스 파일을 생성하여서 등록이 가능하다.

 

  1. 파일을 옮긴 후 system 데몬을 리로드 한다.
    systemctl daemon-reload
  2. 리로딩 후 잘 적용되었는지 확인해 본다.
    systemctl status yourservice.service
  3. 서비스를 실행시킨다.
    systemctl start yourservice.service
  4. 부팅 시 자동적으로 실행되도록 설정한다.
    systemctl enable yourservice.service

 

Service  삭제 방법

  1. 우선 서비스를 중단시킨다.
    systemctl stop yourservice.service
  2. 부팅 시 시작되는 서비스에서 제외한다.
    systemctl disable yourservice.service
  3. 파일들을 삭제한다.
    rm /etc/systemd/system/yourservice.service
    rm /usr/lib/systemd/system/yourservice.service
  4. 데몬을 리로드 한다.
    systemctl daemon-reload

 


 

다음 글

AWS EC2 인스턴스에 볼륨을 추가하는 글을 적으려고 한다.