본문 바로가기
Linux

[Linux] systemd 란?

by 주사휘 2022. 12. 8.
반응형

1. systemd 란?

systemd(system daemon)는 예전의 Unix 시스템에서 사용되던 Init(SysV, Upstart 등) 의 단점들을 개선하여 새롭게 개발된  데몬

 

2. 기존 init과 systemd 의 동작 과정

2-1. init과 systemd의 공통점

  • 리눅스의 커널 부팅이 완료된 이후, 실행되는 첫번째 프로세스
    • 리눅스 커널이 직접 실행하는 유일한 프로세스이며, 이후 실행되는 모든 프로세스의 조상이 됨.
    • 시스템의 여러 서비스들과 데몬들을 초기화 및 실행하는 역할을 수행

2-2. init의 동작 과정

  • Init 시스템은 여러 서비스들과 데몬들을 실행하는데, 기존의 동작 과정은 Config를 사용하여, 서비스들을 실행한다
  1. Config 파일을 작성하여, 마운트
  2. 해당 Config에 작성된 순서대로 서비스 실행

2-3. Systemd 의 동작 과정

  • 각 서비스들의 실행조건이 기록된 Service 파일의 Unit들의 집합들을 토대로 실행된다. 간단한 동작 순서는 아래의 그림 및 .service파일의 내용을 참고한다.
  • [Unit], [Install] ...과 같이 하나의 service 파일에는 여러개의 섹션이 존재하는데 이의 

예를 들어, xxx.service 파일내용은 아래와 같이 구성되어 있다.

[Unit]

Description="demo service"

After=second.target

Requires=first.service

[Install]

....

demo service의 동작 순서

3. Systemd의 섹션들

  • 주의사항
    • service 파일에 작성된 각 섹션들은 대소문자를 꼭 구분하여, 맞게 사용해야 합니다.
    • 여기에 작성된 표준 섹션외에 다른 비표준 섹션이 필요할 경우, 섹션이름에 X-를 추가하여, 정의할 수 있습니다.

3-1. [Unit] Section Directives

  • Description
  • Documentation
  • Requires
  • Wants
  • BindTo
  • Before
  • After
  • Confliects
  • Condition
  • Assert

3-2. [Install] Section Directives

  • WantedBy
  • RequireBy
  • Alias
  • Also
  • DefaultInstance

3-3. [Service] Section Directives

  • simple
  • forking
  • oneshot
  • dbus
  • notify
  • idle

3-3-1. 특정 서비스 타입이 확정될 경우, 추가로 필요한 요소가 존재함

  • RemainAfterexit
  • PIDFile
  • BusName
  • NotifyAccess

3-4. 기타 Section (너무 많아서, 아래 4링크 참고)

  • Socket, Mount, Automount, Swap, Path, Timer, Slice

4. systemd service 를 실행, 관리하기 위한 옵션들

  • ExecStart
    • 프로세스를 실행하기 위한 명령어 작성(전체경로 및 Argument가 필요하다면 작성, ex) /usr/local/bin/python3.7 /etc/...../test.py
  • ExecStartPre
    • 메인 프로세스가 실행되기 전에, 실행되어야 하는 프로그램이 있다면 작성합니다.
    • 여러개의 항목을 작성할 수 있습니다.
    • 명령어 실패를 허용하기 위해서는, 앞에 "-' 를 붙여 작성하면 됩니다.
  • ExecStartPost
    • ExecStartPre 와 반대로, 메인 프로세스가 실행된 이후에 추가로 실행되어야 하는 프로세스 명령어
  • ExecReload
    • 서비스가 Reload가 가능한 서비스일 경우, 필요한 추가 옵션
  • ExecStop
    • 서비스를 stop 하기 위해 필요한 명령어
    • 해당 옵션이 제공되지 않을 경우, 서비스가 중지되면 프로세스가 바로 죽습니다(Killed)
  • ExecStopPost
    • stop 명령을 실행한 뒤에, 필요한 명령을 작성할 수 있습니다.
  • RestartSec
    • 서비스의 자동 재시작이 가능할 경우, 재시작까지의 Sec를 작성할 수 있습니다.
  • Restart
    • 서비스가 재시작 하는 경우, 유형들을 작성 할 수 있습니다.
    • 종류 : always, on-success, on-failure, on-abnormal, on-abort, on-watchdog 
  • TimeoutSec
    • systemd가 서비스를 중지 혹은, 서비스가 failed(kill)되어 중지되기까지의 시간을 정의할 수 있습니다.
      • 해당 timeout은 TimeoutStartSec 과 TimeoutStopSec로 나눠 작성될 수 있습니다.

5. 참고 링크

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

반응형