Systemd란?

Godssi·2025년 8월 5일

Programming

목록 보기
4/4

Linux Application 개발자로 일하면서 다양한 경험을 쌓고 있습니다😄. 그러면서 Linux Embeded System이 부팅되면서 시스템 초기화를 해야하는 사항이 생겨서 이것 저것을 알아보던 중에 Systemd라는 초기화 시스템을 알게 되어서 공부를 하면서 관련된 지식을 정리하려고 합니다.

보신 후에 혹시 잘못된 내용이 있다면 알려주시면 감사하겠습니다!!


Systemd란?

Linux에서 시스템과 서비스의 초기화 및 관리를 담당하는 init 시스템입니다. 대부분의 최신 Linux 배포판에서는 기본 초기화 시스템으로 systemd를 사용합니다. systemd는 시스템의 부팅 과정을 책임지며, 시스템이 가동되는 동안 서비스들을 시작, 중지 관리합니다.

역사

Systemd는 Red Hat에서 일하던 Lennart Poettering과 그 동료 개발자들이 2010년에 전통적인 System V init을 대체하기 위해 개발되었습니다.

이후 Fedora에서는 2011년에 가장 먼저 채택하여 Upstart를 대체하였고, Debian은 2014년에 오랜 논쟁 끝에 Upstart 대신 systemd를 새로운 기본 init 시스템으로 선택했습니다.

핵심 기능

기능설명
서비스 관리서비스 시작/중지/재시작/상태 확인 등을 systemctl로 관리
병렬 부팅의존성 기반의 병렬 서비스 시작으로 부팅 속도 개선
타이머cron을 대체할 수 있는 정밀한 예약 실행(systemd timer)
로깅 통합journald를 통한 로그 수집 및 조회(journalctl)
디바이스/마운트 관리udev,mount 등을 Systemd 단위로 관리 가능
유닛 개념서비스, 타이머, 소켓 등을 유닛 단위로 추상화하여 관리

Systemd Unit

systemd는 모든 것을 Unit이라는 단위로 관리합니다. 각 Unit은 시스템의 다른 부분을 관리합니다. 대표적인 Unit 종류는 아래와 같습니다.

  1. service unit
  • Service나 Application을 관리하는데 사용
  • 어떻게 서비스가 시작되고, 중지되고, 재시작되는지 정의
  1. target unit
  • 여러 유닛을 그룹화하여 관리하는데 사용
  • 시스템의 특정 상태에 도달하기 위해 필요한 유닛들을 조합 가능
  1. mount unit
  • 파일 시스템 마운트 지점을 관리
  • /etc/fstab에 있는 마운트 지점을 systemd unit으로 변환 가능
  1. timer unit
  • 시간 기반의 작업을 스케줄링하는데 사용
  • cron 대신 사용할 수 있으며, 특정 시간에 서비스를 시작 가능
  1. socket unit
  • IPC, TCP 등 네트워크 Socket 관리
  • 서비스가 필요할 때만 서비스를 시작하도록 설정 가능
  1. device unit
  • 시스템의 디바이스를 나타냄
  • udev 규칙에 의해 생성되며, 특정 디바이스에 대한 의존성을 정의할 때 사용
  1. automount unit
  • 파일 시스템 마운트 지점을 자동으로 마운트하는데 사용
  • 접근 시에만 마운트를 활성화하도록 설정 가능
  1. swap unit
  • 스왑 공간 관리
  • 스왑 파일이나 스왑 파티션을 정의하여 사용 가능
  1. path unit
  • 파일 시스템의 경로를 감시하고, 변경 사항이 있을 때 서비스 활성화
  • 특정 파일이나 디렉토리의 변화를 감지할 때, 사용
  1. snapshot unit
  • 시스템의 현재 상태를 snapshot으로 저장
  • 시스템의 설정이나 서비스 상태를 임시로 저장하고 복원할 때 사용
  1. slice unit
  • 시스템 프로세스를 그룹화하여 리소스 관리 수행
  • cgroups를 사용하여 리소스 사용량을 제한하고 관리
  1. scope unit
  • 시스템에서 직접 생성하지 않은 프로세스를 systemd의 관리 하에 두기 위해서 사용
  • 사용자가 직접 시작한 프로세스 또는 다른 시스템 프로세스에서 파생된 프로세스를 관리하는데 사용 가능
  • 주로 시스템의 리소스 할당 및 관리를 위해 systemd에 의해 내부적으로 사용

Systemd Unit 파일 작성 방법

Systemd unit 파일은 다음과 같은 구조로 이루어옂 있습니다. 보통 /etc/systemd/system/에 위치해있습니다.

[Unit]
Description=설명
After=network.target

[Service]
ExecStart=/usr/bin/myservice
Restart=on-failure

[Install]
WantedBy=multi-user.target

[Unit] 섹션

Unit의 메타 정보, 의존성 정보를 나타내는 부분

  • Description : 서비스 설명
  • After : 지정된 유닛 이후에 시작
  • Requires : 의존 서비스, 없으면 현재 유닛도 실패
  • Wants : 함께 실행되길 원하는 유닛(강제 X)

[Service] 섹션

서비스의 실행 방법을 나타내는 부분

  • ExecStart : 서비스 시작 명령
  • ExecStop : 서비스 정지 명령
  • ExecReload : 설정 재로딩 명령
  • Restart : 실패 시 재시작 정책
  • User : 실행 사용자 지정
  • Group : 실행 그룹 지정
  • WorkingDirectory : 작업 디렉토리 설정
  • Enviroment : 환경 변수 설정
  • Type : 서비스 타입 지정(기본 : simple)
    • simple : 기본값. ExecStart 명령이 데몬 역할
    • forking : 백그라운드 데몬
    • oneshot : 단일 실행 후 종료(ex. 설정 스크립트)
    • notify : 데몬이 systemd에 직접 상태 알림
    • idle : 다른 유닛 실행 후 유후 시 실행

[Install] 섹션

부팅 시 활성화 설정을 나타내는 부분

  • WantedBy=multi-user.target : enable시 심볼릭 링크로 연결됨
  • RequiredBy : 반드시 필요한 유닛 지정

Systemd 실행 방법

서비스나 타이머를 systemd로 실행하는 방법은 다음과 같습니다.

  • systemctl start [Unit Name] : 유닛 즉시 실행
  • systemctl stop [Unit Name] : 유닛 즉시 중단
  • systemctl restart [Unit Name] 유닛 재시작
  • systemctl status [Unit Name] : 유닛 상태 확인
  • systemctl enable [Unit Name] : 부팅 시 자동 실행 등록
  • systemctl disable [Unit Name] : 부팅 시 자동 실행 해제
  • systemctl list-units --type=service : 활성화된 서비스 확인

다음과 같이 systemd에 대해서 알아보고 systemd Unit 작성실행 방법까지 알아보았습니다. systemd를 통해서 Linux System의 초기화를 진행하면 아주 편한 것 같네요!!
다른 분들도 초기화 작업을 할 때, systemd를 사용하면 좋겠습니다😄.

profile
세상을 도울 로봇 개발자

0개의 댓글