글

Uvicorn 유닛 파일 설정값

유닛으로 등록한 프로세스는 부팅 시 기동되고 장애 시 재기동되며, 재시작 정책·메모리 상한·작업 디렉터리는 유닛 파일에 지정한다.

작성일 · 읽는 시간 2분 · Systemd 245 기준

유닛 파일

수동으로 기동한 프로세스는 재부팅하면 유지되지 않는다. 유닛으로 등록하면 부팅 시 기동되고, 장애로 종료되면 다시 기동된다.

유닛으로 등록한 프로세스의 기동과 재시작 조건

ini/etc/systemd/system/blog.service
[Unit]
Description=blog (uvicorn :5011)
After=network-online.target
Wants=network-online.target

[Service]
User=app
WorkingDirectory=/srv/blog/source/server
Environment=PYTHONUNBUFFERED=1
ExecStart=/srv/blog/venv/bin/python -m uvicorn main:app --host 127.0.0.1 --port 5011
Restart=on-failure
RestartSec=5
MemoryMax=512M
TasksMax=128

[Install]
WantedBy=multi-user.target

설정값의 근거

  • --host 127.0.0.1: 외부에서 직접 접근할 수 없게 하고 nginx를 경유한 접근만 허용한다.
  • Restart=on-failure: 오류로 종료된 경우에만 재시작한다. 수동으로 중지한 서비스는 재시작하지 않는다.
  • MemoryMax: 한 서비스가 메모리를 전부 소진하는 상황을 방지한다.
  • PYTHONUNBUFFERED=1: 로그가 버퍼에 누적되지 않고 즉시 journalctl에 표시된다.

유닛 설정값이 정하는 접근 경로·메모리 상한·로그 표시

등록과 기동

bash
sudo systemctl daemon-reload
sudo systemctl enable --now blog.service
systemctl status blog.service