23일차

장민우·2024년 4월 26일

Systemd


기존의 init 프로세스를 대체하는 프로세스로 최신 리눅스에 도입된 PID 1번 프로세스

Systemd 기능 및 특징

  • init 프로세스에 대한 호환성 제공
  • Systemd 유닛 사용
  • 시스템 부팅 시 서비스 병렬 시작
  • 의존성 기반의 서비스 제어
  • systemctl을 사용한 사용자 정의 명령어 미지원
  • systemsd에 의해서 실행된 서비스만 관리
  • 시스템 종료시(Shutdown)시 실행중인 서비스만 중지
  • 서비스에 대해서 5분의 timeout 적용
  • 통합 로그 관리(systemd-journald)

Systemd UNIT


Systemd 시스템에서 시스템을 구성하는 구성요소

  • /usr/lib/systemd/system : 소프트웨어 설치시 생성되는 Systemd UNIT 기본 경로.
  • /etc/systemd/system : 시스템 관리자가 설정한 Systemd UNIT이 위치하는 경로.
  • /run/systemd/system : Runtime 시 생성된 Systemd UNIT이 위치하는 경로.

Systemd UNIT 파일 주요 구성 요소

  • [Unit]섹션 : Systemd UNIT에 대한 일반적인 내용
  • [UNIT_TYPE] 섹션 : 해당 Systemd UNIT Type에 대한 내용
  • [Install] 섹션 : Systemd UNIT의 설치와 관련된 내용

Systemd UNIT 종류

  • service unit
  • device unit
  • mount unit
  • automount unit
  • swap unit
  • target unit
  • timer unit
  • snapshot unit
  • socket unit
  • scpoe unit
  • slice unit

Systemd UNIT 실행 상태 확인
$systemctl list-units

  1. UNIT : 유닛의 이름
  2. LOAD : 시스템에 유닛의 설치 유무.
    • loaded : 시스템에 해당 유닛이 존재.
    • not - found : 해당 유닛이 시스템에 존재하지 않음.
  3. ACTIVE : 유닛의 실행(active)상태.
    • active : 유닛이 실행 중인 상태.
    • inactive : 유닛이 실행 중이지 않은 상태.
  4. SUB : 유닛의 실행 상태를 세부적으로 나타냄.
    • running : 유닛이 실행 중인 상태.
    • exited : 유닛이 실행 중이지만 systemd가 관리하지 않고 커널에서 관리.
    • waiting : 유닛이 특정 이벤트를 기다리는 상태.
    • mounted : 마운트 유닛이 마운트된 상태.
    • plugged : 장치 유닛이 연결된 상태.
    • dead : 실행 중이지 않은 상태.
    • listening : 소켓 유닛이 대기 중인 상태.
  5. JOB : 유닛에 대기 중인 작업.
  6. DESCRIPTION : 유닛에 대한 간단한 설명.

Systemd UNIT 의존성 확인
$systemctl list-dependencies

Systemd UNIT 부팅시 자동 실행 여부 확인
$systemctl list-unit-files

Systemd UNIT 제어 명령어 사용 방법
$systemctl SUBCOMMAND SYSTEMD_UNIT

특정 Systemd UNIT 시작
$systemctl start SYSTEMD_UNIT

특정 Systemd UNIT 종료
systemctl stop SYSTEMD_UNIT

특정 Systemd UNIT 상태 확인
$ systemctl status SYSTEMD_UNIT

특정 Systemd UNIT 재시작 - 종료 후 시작.
$systemctl restart SYSTEMD_UNIT

특정 Systemd UNIT 리로드 - 프로세스를 종료하지 않고 다시 읽음.
$systemctl reload SYSTEMD_UNIT

특정 Systemd UNIT을 부팅시 자동으로 실행
$systemctl enable SYSTEMD_UNIT

특정 Systemd UNIT을 부팅시 자동으로 실행하지 않음
$systemctl disable SYSTEMD_UNIT

특정 Systemd UNIT을 마스크 설정
$systemctl mask SYSTEMD_UNIT

systemd에서는 유닛을 병렬로 실행하며 의존성으로 인해 사용자가 실행하지 않더라도 자동으로 시작되는 유닛들이 존재한다. MASK를 설정해주면 이런 유닛들도 자동으로 시작되지 않는다.

특정 Systemd UNIT을 마스크 설정 해제
$systemctl unmask SYSTEMD_UNIT

리눅스 부트 프로세스


  • init
    • runlevel
      • runlevel 0 : halt* <- 시스템 종료
      • runlevel 1 : single mode * <- Single Mode : 문제가 생겼을 때 root사용자로 접속.
      • runlevel 2 : multi-user (without NFS)
      • runlevel 3 : multi-user
      • runlevel 4 : reserved
      • runlevel 5 : X11(graphic)
      • runlevel 6 : reboot

  • systemd
    • target
      • default.target : 기본 부팅 타겟. 별도의 파일이 아닌 기본 부팅 타겟으로 사용되는 Systemd Target UNIT과 Symbolic Link로 심볼릭 링크로 연결됨.
      • multi-user.target : 다중 사용자 부팅 타겟(CLl)
        ->basic.target->sysinit.target->local-fs.target이 실행되어야 함.
        runlevel3과 매핑됨.
      • graphical.target : 다중 사용자 부팅 타겟(GUI)
        ->multi-user.target이 실행되어야 함. runlevel5과 매핑됨.
      • emergency.target : 긴급 쉘(emergency shell) 제공
        ->Root FS이 읽기 전용(ro) 마운트 됨.
      • rescue.target : 복구 쉘(rescue shell) 제공
        ->Root FS이 읽기 쓰기(rw)로 마운트 됨.
  • 현재 부팅 런레벨 모드 확인
    $runlevel
    $who -r

  • 기본 부팅 타겟 설정
    $systemctl set-default SYSTEMD_TARGET_UNIT

  • 기본 부팅 타겟 확인
    $ systemctl get-default

  • Runtime 상태에서 부팅 타겟 전환
    $systemctl isolate SYSTEMD_TARGET_UNIT

  • 부트 로더에서 부팅할 커널 항목 선택

  1. 터미널에서 $systemctl reboot
    [e]키를 눌러 부트로더(Boot Loader)로 진입
  2. linux로 시작하는 행에서 [End]키를 눌러 행의 끝으로 이동 후 systemd.unit=multi-user.target 입력.
  3. Cltrl + X 누름.

0개의 댓글