정지용
기술스택 목록
DevOps

systemd

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

리눅스 서비스와 프로세스의 시작·종료·재시작을 관리하는 init 시스템

systemd는 리눅스 부팅 과정과 백그라운드 서비스(데몬)의 생명주기를 관리하기 위해 만들어진 init 시스템 겸 서비스 매니저다. 전통적인 init 스크립트 방식이 병렬 처리와 의존성 관리에 취약했던 문제를 해결하기 위해 등장했으며, 서비스 단위(unit)를 선언적으로 정의하고 부팅 시 병렬로 안전하게 기동하는 것을 목표로 한다. 서비스가 죽었을 때 자동으로 재시작하거나, 시스템 부팅 시 자동으로 실행되도록 설정하는 용도로도 널리 쓰인다.

이럴 때 사용합니다

  • 장시간 실행되는 봇이나 서버 프로세스를 백그라운드 데몬으로 안정적으로 운영하고 싶을 때
  • 프로세스가 죽었을 때 사람이 개입하지 않아도 자동으로 재시작되길 원할 때
  • 서버 재부팅 후에도 필요한 프로그램이 자동으로 다시 실행되게 하고 싶을 때
  • 로그를 파일로 직접 관리하지 않고 표준화된 방식으로 조회하고 싶을 때

핵심 개념

unit
systemd가 관리하는 대상의 기본 단위로, 서비스·마운트·타이머 등 다양한 리소스를 나타낸다.
service unit
.service 확장자를 가진 unit 파일로, 실행할 명령어와 재시작 정책 등 데몬의 동작 방식을 정의한다.
systemctl
unit을 시작·중지·활성화·상태 확인하기 위해 사용하는 명령줄 도구다.
journald
systemd가 관리하는 로그 수집 데몬으로, 각 서비스의 표준 출력과 오류를 중앙에서 기록·조회할 수 있게 해준다.
enable/start
enable은 부팅 시 자동 실행되도록 등록하는 것이고, start는 지금 즉시 서비스를 실행하는 것으로 두 동작은 서로 독립적이다.
Restart 정책
프로세스가 비정상 종료되었을 때 systemd가 자동으로 재시작할지 여부와 조건을 지정하는 설정이다.

간단한 서비스 unit 파일 정의 및 실행

봇 프로그램을 서비스로 등록해 실패 시 자동 재시작되고 부팅 시 자동 실행되도록 설정하는 예시다.

예시
# /etc/systemd/system/mybot.service
[Unit]
Description=My Trading Bot
After=network.target

[Service]
ExecStart=/usr/bin/python3 /opt/mybot/main.py
Restart=on-failure
User=botuser

[Install]
WantedBy=multi-user.target

# 등록 및 실행
# systemctl daemon-reload
# systemctl enable mybot
# systemctl start mybot
# systemctl status mybot

처음 쓸 때 흔한 함정

  • unit 파일을 수정한 뒤 daemon-reload를 하지 않으면 변경 사항이 반영되지 않는다.
  • enable만 하고 start를 하지 않으면 지금 당장은 서비스가 실행되지 않는다.
  • print문 로그가 안 보일 때는 journalctl로 확인해야 하는데 이를 놓치기 쉽다.

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.