프로젝트/주식뉴스분석

[ubuntu]Flask 서버 service 등록

그래서그렇지 2022. 10. 7. 15:09

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

 


Service이란

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

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

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

 

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

 

 

Service  파일 생성

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

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

 

[Unit]
Description=flask simple server. python-flask
After=syslog.target network.target
[Service]
Type=idle
User=ubuntu
WorkingDirectory=/work/dir/path
ExecStart=/python3/path -m gunicorn --bind 0.0.0.0:port --workers 1 --threads 4 --timeout 30 main:app --error-logfile /error/log/path --name=stock
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target

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

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 인스턴스에 볼륨을 추가하는 글을 적으려고 한다.