Linux/리눅스 실무의 이해

02-02-02 Systemd

바우네 2022. 1. 12. 19:00
반응형

systemd 소개

  1. systemd의 개요
    1. 정의
      1. systemd는 이전 버전의 리눅스에서 사용하였던 SysV init 시스템을 대체하기 위한 시스템 및 서비스를 위한 매니저 역할을 수행한다.
      2. 레드햇사의 Lennart Poettering과 Kay Sievers가 처음 개발하였고, LGPL 라이선스이다.
    2. 특징
      1. 기존의 SysV init 스크립트와 호환성을 유지하도록 설계되었다.
      2. 부팅 시 시스템의 서비스들의 병렬로 시작할 수 있는 기능을 제공
      3. 데몬이 필요한 순간 실행하여 시스템 리소스를 절약할 있는 온디맨드 액티베이션(ondemand activation) 기능을 제공한다. 구체적으로 D-Bus, 소켓, 장치, 경로 기반 온디맨드 액티베이션 기능을 제공한다.
      4. 서비스 간 의존성을 고려하여 서비스의 시작 순서를 제어할 수 있는 기능을 제공한다.
      5. 시스템 서비스, 소켓상 패킷의 수신 대기, 실행 레벨(run level) 등의 시스템 및 서비스와 관련된 정보를 '유닛(systemd units)'이라는 단위로 추상화하여 관리한다.
  2. systemd의 구조
    1. 유닛(systemd units)
      1. systemd는 시스템을 관리하기 위해 Service, Target, Automount, Device, Mount, Path, Scope, Slice, Snapshot, Socket, Swap, Timer 등 다양한 유닛을 제공하며 그 중 대표적인 유닛은 다음과 같다.
      2. 유닛 유형 확장자 설명
        Service unit .service 시스템상에서 동작하는 서비스 또는 데몬과 연관된 유닛
        Target unit .target 다수의 유닛을 하나의 그룹을 관리할 수 있는 유닛. 대표적인 예로 SysV Init에 존재했던 실행 레벨(run level)을 Target 유닛으로 관리할 수 있다.
        Device unit .device 커널이 인식 가능한 장치와 연관된 유닛. 가령 특정 USB 장치가 연결될 때 특성 서비스 유닛을 실행할 수 있다.
        Mount unit .mount 파일 시스템의 마운트 포인트를 나타내는 유닛
        Path unit .path 파일 시스템의 파일과 디렉터리와 연관된 유닛
        Socket unit .socket 프로세스 간 통신을 의미하는 IPC(inter-process communication)를 위해 사용하는 소켓과 연관된 유닛
        Timer unit .timer systemd 타이머와 연관된 유닛
    2. 유닛을 위한 파일 경로
      • 각 경로에 동일한 유닛이 발견된다면 표상 아래에 위치한 경로의 유닛이 우선하게 된다.
      • 경로 설명
        /usr/lib/systemd/system/ RPM 패키지로 배포되어 설치된 유닛은 이 경로에 존재한다.
        /run/systemd/system/ 실행 시 생성된 유닛 파일이 위치하는 곳이며 /usr/lib/systemd/system/ 경로보다 이 경로에 위치한 유닛이 우선한다.
        /etc/systemd/system/ systemctl enable 명령을 통해 생성된 유닛이 위치하는 경로이며 /run/systemd/system/ 경로보다 이 경로에 위치한 유닛이 우선한다.
    3. 유닛 파일의 구조
      • 유닛 파일은 [Unit], [Unit type], [Install]와 같이 3개의 섹션으로 구성된다.
      • 섹션 설명
        [Unit] 유닛 공통의 일반적인 사항을 포함하고 있다. Description은 유닛에 대한 설명이고 Documentation은 유닛의 설명이 있는 웹 경로를 지정한다. Alter는 유닛이 시작할 순서를 정의하고 Requires는 유닛의 의존 관계를 지정한다. Wants는 Requires보다는 약한 의존성을 지정할 수 있다.
        [Unit type] 유닛 유형의 특성을 기술한다. 예를 들어 Service 유닛은 [Service]라는 섹션 이름을 갖는다. [Service] 섹션의 ExecStart는 유닛이 실행할 때 실행할 명령어나 스크립트를 지정한다. ExecStop은 유닛이 중지할 때 실행할 명령어나 스크립트를 지정한다.
        [Install] systemctl enable 또는 disable 명령어로 유닛을 제어할 때 필요한 정보를 담고 있다. RequireBy는 해당 유닛에 의존하고 있는 유닛의 목록을 지정한다. WantedBy는 유닛에 약한 의존관계를 갖고 있는 목록을 지정한다.
  3. systemd의 주요 명령어
    1. 서비스 관리
      • 서비스 시작: systemctl start name.service
      • 서비스 중지: systemctl stop name.service
      • 서비스 재시작: systemctl restart name.service
      • 서비스 실행 중인 경우만 재시작: systemctl try-restart name.service
      • 서비스 설정 갱신: systemctl reload name.service
      • 서비스 상태 확인: systemctl status name.service
      • 서비스 목록 확인: systemctl list-units-type service --all
    2. 타깃 유닛
      • 기본 타깃 확인: systemctl get-default
      • 현재 로드된 모든 타깃: systemctl list-units-type target
      • 기본 타깃 변경: systemctl set-default name.target
      • 현재 타깃 변경: systemctl isolate name.target
      • 복구 모드 변경: systemctl rescue
      • 응급 모드 변경: systemctl emergency
    3. 전원 관리
      • 시스템 끄기: systemctl halt
      • 시스템 전원 끄기: systemctl poweroff
      • 시스템 재시작: systemctl reboot
      • 시스템을 서스펜드하기: systemctl suspend
      • 시스템을 하이버네이트하기: systemctl hibernate
      • 시스템을 하이버네이트 및 서스펜드하기: systemctl hybrid-sleep
    4. 원격 제어
      • 원격 시스템에 실행 중인 sshd 서비스에게 명령어를 전달하여 원격 시스템의 서비스를 제어할 수 있다. systemctl의 --host 또는 -H 옵션을 사용하여 원격지의 sshd 서비스에 연결할 수 있다.
      • systemctl -H root@linuxserver.example.com status httpd.service

반응형

'Linux > 리눅스 실무의 이해' 카테고리의 다른 글

02-03 X 윈도우  (0) 2022.01.15
02-02-03 파일 시스템의 이해  (0) 2022.01.14
02-02-01 리눅스의 구조  (0) 2022.01.11
02-01 리눅스와 하드웨어  (0) 2022.01.11
01-02 리눅스의 기초  (1) 2022.01.02