CS 공부/기타

[ETC] 긴 프로세스 명령어, systemd 서비스로 정의하여 사용하기

강_토발즈 2025. 9. 8. 20:48

 

집에서 사용하는 미니PC 서버는, Ubuntu 2개, 윈도우 1개를 실행하면 너무 힘든나머지 정신이 나가버린다. (Down) 이럴때마다 만들어 놓은 서비스들이 죽어서 다시 하나하나 실행해줘야 하는 번거로움이 생긴다. 새로운 세션으로 접속하여 명령어 history도 없어지면 그 긴 서비스 시작 명령어를 다시 찾기란 매우 번거롭다.

 

이럴때 system 에서 관리하는 주요 서비스처럼 내가 만든 서비스나 프로세스를 예약어로 등록해서 실행하면 좋겠다는 생각을 했고 아니나 다를까 systemd 에 등록하여 사용할 수 있는 방법을 알게 되었다. 바로 알아보도록 하자.

 

 

1. 도입 – 왜 이게 필요할까?

매번 서버를 켤 때마다 python3 -m uvicorn app.main:app --host 0.0.0.0 --port 8000 (개인 ChatGPT - DB 연동 서비스 프로세스 명렁어)  같은 긴 명령어를 치는 건 너무 귀찮다.  마치 매일 집 현관문을 열 때 비밀번호 20자리를 다 눌러야 하는 느낌. 그래서 우리는 “열쇠” 역할을 해줄 systemd 서비스 등록을 사용하는 것이다. 이제부턴 systemctl start myapp 한 줄이면 끝난다.

 

 

2. systemd는 뭐하는 놈인가?

  • Linux가 부팅될 때 무엇을 언제 켜야 하는지 관리하는 관리자
  • 우리가 만든 서버, 데몬, 프로그램을 **서비스(Service)**로 등록하면 자동으로 다뤄준다.
  • Windows로 치면 “서비스 관리 도구”와 비슷하다.

 

3. 서비스 파일은 집 열쇠처럼

  • 서비스 파일 = “이 프로그램을 이렇게 실행해!”라고 알려주는 사용설명서
  • /etc/systemd/system/내서비스이름.service에 저장한다.

예시 (파이썬으로 실행하는 ChatGPT & 개인DB 연동 서비스)

[Unit]
Description=내가 만든 FastAPI 서버
After=network.target

[Service]
ExecStart=/usr/bin/python3 -m uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always

[Install]
WantedBy=multi-user.target

 

- 여기서 중요한 건 ExecStart= 한 줄. 원래 길었던 명령어를 여기에 넣어두면 이제 다시는 외울 필요가 없다.

 


4. 등록한 서비스의 사용법 

sudo systemctl daemon-reload   # 새 서비스 등록 반영
sudo systemctl start myapp     # 실행
sudo systemctl stop myapp      # 중지
sudo systemctl enable myapp    # 재부팅 후 자동 시작
sudo systemctl status myapp    # 상태 확인

 

이제부터는 내가 만든 서비스 이름과 start / stop / status 세 단어만 기억하면 된다. 리눅스의 방화벽, rsyslog 도 이와 비슷하기 때문에 매우 쉽고 간결하다.