작성한 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
- Type: simple로 ExecStart에서 호출한 프로세스를 main 프로세스라고 가정하고 실행된다.
- Install: enable시 사용됨
- wantedby: 예제를 보고 multi-user.target을 작성했는데 글을 보니 이해가 되었다.
ubuntu에서는 runlevel이 있는데 보통 서버용도(cui, network, multi-user)로 사용되는 레벨이 3
multi-user.target으로 설정하면 가장 실행환경이 runlevel3과 가깝기에 multi-user.target을 사용했다.
참고 링크: https://unix.stackexchange.com/questions/506347/why-do-most-systemd-examples-contain-wantedby-multi-user-target
- wantedby: 예제를 보고 multi-user.target을 작성했는데 글을 보니 이해가 되었다.
Service 등록 방법
service는 ubuntu 20.04 기준 /usr/lib/systemd/system/ 아래에 서비스 파일을 생성하여서 등록이 가능하다.
- 파일을 옮긴 후 system 데몬을 리로드 한다.
systemctl daemon-reload - 리로딩 후 잘 적용되었는지 확인해 본다.
systemctl status yourservice.service - 서비스를 실행시킨다.
systemctl start yourservice.service - 부팅 시 자동적으로 실행되도록 설정한다.
systemctl enable yourservice.service
Service 삭제 방법
- 우선 서비스를 중단시킨다.
systemctl stop yourservice.service - 부팅 시 시작되는 서비스에서 제외한다.
systemctl disable yourservice.service - 파일들을 삭제한다.
rm /etc/systemd/system/yourservice.service
rm /usr/lib/systemd/system/yourservice.service - 데몬을 리로드 한다.
systemctl daemon-reload
다음 글
AWS EC2 인스턴스에 볼륨을 추가하는 글을 적으려고 한다.
'프로젝트 > 주식뉴스분석' 카테고리의 다른 글
AWS EC2 인스턴스 볼륨추가 (0) | 2022.10.12 |
---|---|
주식 뉴스 프로젝트 Flask 서버 (0) | 2022.10.02 |
AWS EC2 Mysql, MongoDB 설치 (1) | 2022.09.30 |
AWS EC2 nginx + letsencrypt (0) | 2022.09.29 |
AWS EC2 IP고정(탄력적IP) 및 도메인 등록 및 연결 (2) | 2022.09.28 |