목차
개요
(추후 작업할 때 참고할 용도로 작성하는 글이다.)
systemd? 왜 쓰는가?
EC2에서는 Django, Flask, FastAPI 혹은 Daemon을 실행시키기 위해서는 system daemon을 이용해야한다. 이는 linux os에서 특정 프로그램을 상시 가동시킬 수 있게 만들어준다. (단순히 코드를 실행시키는 main.py만 실행시키고 terminal session을 종료하면 같이 종료된다)
1. Service File
Service File은 대략 다음과 같이 생겼다.
[Unit]
Description=PROJECT SERVICE
After=network.target
[Service]
User=ec2-user
WorkingDirectory=/project
LimitNOFILE=4096
Environment="PATH=/project/venv/bin:$PATH"
ExecStart=/project/venv/bin/python application.py
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target%
주의해서 볼건 "WorkingDirectory", "Enviormenet", "ExecStart" 부분이다.
필자 나름의 이해한 내용대로 적어보자면 다음과 같다
- "WorkingDirectory"는 service가 어떤 경로를 root directory로 삼을 것인지를 설정하는 부분이다.
- "Enviorment"는 어떤 환경(바이너리 혹은 기타 경로)이 system path에 등록되어야 하는지에 대한 부분이다.
- "ExecStart" 는 service 실행 시 어떤 명령을 실행할 것인지 에 대한 부분이다.
주의할점은 만약 상황에 따라 바이너리 파일 경로의 위치를 바꾼 경우 해당 경로를 Enviorment에 등록해야한다는 점이다.
2. Service File 등록하기
system daemon을 실행하기 위해서는 먼저 *.service 파일이 다음 위치에 있어야 한다.
$ /etc/systemd/system/
이후 아래 명령으로 system daemon을 등록할 수 있다.
$ systemctl enable [SERVICE_FILE]
예시를 하나 들어보자 만약 example.service 라는 파일이 "/etc/systemd/system"안에 위치한다고 가정해보자. 그렇다면 다음과 같이 명령을 사용하는 것이다.
$ systemctl enable example
3. Service File 기본 명령
앞서 등록한 service file을 실행시키려면 다음과 같은 명령을 사용하면 된다
$ systemctl start example
재실행은 다음과 같다.
$ systemctl restart example
이제 유추할 수 있겠지만 정지는 다음과 같다.
$ systemctl stop example
4. Service 잘 돌아가고 있는가 ?
service file을 실행시키고 그 상태를 보는 명령은 다음과 같다.
$ systemctl status example
만약 모종의 이유로 service가 잘 돌아가고 있지 않다면 다음과 같은 결과가 나올 것이다.
성공한 경우는 다음과 같다.
5. 기타
service file이 수정된 경우 다음과 같이 reload 시키고 재시작하자.
$ systemctl daemon-reload
$ systemctl restart example
'Architecture > AWS' 카테고리의 다른 글
[AWS] AWS에서의 Public 및 Private Subnet 설정 (0) | 2024.03.24 |
---|---|
[AWS] EC2(Amazon Linux 2023)에 Python 설치하기 (0) | 2024.01.20 |
[AWS]ECS에 Python Script Scheduling 적용하기 (0) | 2023.01.28 |
[AWS] App Runner를 사용해보자. (3) | 2023.01.05 |