Notice
Recent Posts
Recent Comments
05-18 01:37
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Linux master 1급 - systemd 란 본문

OS/Linux

Linux master 1급 - systemd 란

알 수 없는 사용자 2023. 1. 29. 20:10
더보기

 리눅스 마스터 1급의 이론서를 공부하면서 정리한 내용들을 적으려고 한다. 방학 동안 필기만 합격을 해놓고, 1학기의 강의를 들으면서 실기를 이번년도 상반기에 딸 것이다. 정리한 내용이 다른 분들에게도 도움이 되었으면 한다. 또한, 2급을 따지 않은 입장에서 쓴 글들은 정말 논리적으로 비약적이고, 높은 확률로 정확하지 않을 수 있으므로, 이를 보는 다른 사람들은 해당 글들을 비판하면서 볼 수 있었으면 좋겠습니다.

 systemd 프로세스는 병렬 처리가 가능하도록 작성된 시스템 및 서비스를 관리하는 역할을 수행한다. 서비스 간 Dependencies를 고려하여 서비스의 시작 순서를 제어할 수 있는 기능을 제공하거나 시스템 서비스, 소켓상 패킷의 수신 대기, 실행 레벨(run level) 등의 시스템 및 서비스와 관련된 정보를 유닛(System Units)이라는 단위로 추상화하여 관리한다.

 

유닛(systemd units)

 systemd는 시스템을 관리하기 위해 다양한 유닛(Service, Target, Autonount, Device, Mount, Path, Scope, Slice, Snapshot, Socket, Timer 등)을 제공한다.

유닛 유형 확장자 설명
Service unit .service 시스템 상에서 동작하는 서비스 또는 데몬과 연관된 유닛
Target unit .target 다수의 유닛을 하나의 그룹으로 관리할 수 있는 유닛, 대표적으로 SysV init에 존재하였던 실행레벨을 Target 유닛으로 관리할 수 있다.
Device unit .device 커널이 인식 가능한 장치와 연관된 유닛, 가령 특정 USB 장치가 연결될 때 특정 서비스 유닛을 실행할 수 있다.
Mount unit .mount 파일 시스템의 마운트 포인트를 나타내는 유닛
Path unit .path 파일 시스템의 파일과 디렉터리와 관련된 유닛
Socket unit .socket 프로세스 간 통신을 의미하는 IPC(inter-process cominucation)를 위해 사용하는 소캣과 연관된 유닛
Timer unit .timer systemd 타이머와 연관된 유닛

 

유닛을 위한 파일 경로

 각 경로에 동일한 유닛이 발견된다면 표상 아래에 위치한 경로의 유닛이 우선하게 된다.

경로 설명
/usr/lib/systemd/system/ RPM 패키지로 배포되어 설치된 유닛은 이 경로에 존재한다
/run/systemd/system/ 실행 시 생성된 유닛 파일이 위치하는 곳이며 /usr/lib/systemd/system/ 경로보다 우선한다
/etc/systemd/system/ systemctl enable 명령을 통해 생성된 유닛이 위치하는 경로이며 /run/systemd/system/보다 우선한다.

 

유닛 파일의 구조

 유닛 파일은 [Unit], [Unit type], [Install]와 같이 3개의 섹션으로 구성된다. (직접 유닛파일을 하나 까서 해당 내용과 같이 보는 것이 좋다.)

섹션 설명
[Unit] 유닛 공통의 일반적인 사항을 포함한다.

Description : 유닛에 대한 설명
Document : 유닛의 설명이 있는 웹 경로(URLs)를 지정
After : 유닛이 시작할 순서를 정의
Requires : 유닛의 의존관계를 지정
Wants : Requires 보다는 약한 의존성을 지정
[Unit type] 유닛 유형 마다의 특성을 기술한다.

Service : [Service]라는 섹션 이름을 가짐. 해당 섹션의 ExecStart는 유닛이 실행할 때 실행할 명령어나 스크립트를 지정함. ExecStop은 유닛이 중지할 때 실행할 명령어나 스크립트를 지정함.
[Install] systemctl enable 또는 disable 명령어로 유닛을 제어할 때 필요한 정보를 담고 있다.

RequireBy : 해당 유닛에 의존하고 있는 유닛의 목록을 지정
WantedBy : 유닛에 약한 의존관계를 갖고 있는 목록을 지정

 

systemd의 주요 명령어

서비스 관리

  • systemctl start name.servivce : 서비스 시작
  • 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 : 서비스 목록 확인

타겟 유닛

  • systemctl get-default : 기본 타겟 확인
  • systemctl list-units --type target : 현재 로드된 모든 타겟 확인
  • systemctl set-default name.target : 기본 타겟 변경
  • systemctl isolate name.target : 현재 타겟 변경
  • systemctl rescue : 복구 모드 변경
  • systemctl emergency : 응급 모드 변경

전원 관리

  • systemctl halt : 시스템 끄기
  • systemctl poweroff : 시스템 전원 끄기
  • systemctl reboot : 시스템 재시작
  • systemctl suspend : 시스템을 서스펜드하기
  • systemctl hibernate : 시스템을 하이버네이트하기
  • systemctl hybrid-sleep : 시스템을 하이버네이트 및 서스펜드하기

원격 제어

 원격 시스템에 실행중인 sshd 서비스에게 명령어를 전달하여 원격 시스템의 서비스를 제어할 수 있다. systemctl의 --host 또는 -H 옵션을 사용하여 원격지의 sshd 서비스에 연결할 수 있다.

$ systemctl -H rooot@linuxserver.example.com status httpd.service
Comments