이전 게시물에서 넘어와 여기서는 Systemd 에 대한 자세한 내용을 알아보도록 하겠다.
아래는 systemd의 특징을 세부적으로 분류한 것이다.
1) 서비스/데몬 관리
systemd 에서 unit 은 systemd가 관리할 수 있는 객체이다.
- /etc/systemd/system : 시스템 관리자가 수동으로 생성 및 관리하는 유닛들이 저장되어 있는 디렉토리
- /run/systemd/system : 시스템이 런타임 상태일 때 임시로 유닛 파일을 저장하는 디렉토리 (/run 경로에 있어서 재부팅되면 모두 삭제된다.)
- /usr/lib/systemd/system : 특정 유닛이 포함된 패키지를 설치하면 저장되는 디렉토리의 원본 파일. 사용자가 서비스를 enable 시키면 이 디렉토리에 존재하는 파일이 /etc/systemd/system 디렉토리에 링크된다.
<unit 의 종류>
각각의 unit 들에 대한 구성 파일들은 /etc/systemd/system 경로에서 확인할 수 있다. 확장자에 따라 구성 파일의 unit 을 유추할 수 있다.
=> 여기서 "같은 이름의 서비스 유닛이 존재한다" 란 말은 해당 unit 들은 일반적인 unit 과 달리 다른 unit 과의 상호작용하며 긴밀하게 연결되어 있다는 것을 뜻한다.(path, timer, socket)
만약 socket unit(example.socket) 에서 8080포트에서 클라이언트의 요청을 수신한다고 하면 service unit(example.service) 이 클라이언트의 요청을 받을 때 자동으로 시작되는 것처럼 !
1. Service Unit
- 기본적으로 [Util], [Install] 섹션이 존재하며 [service] 섹션에 서비스 유닛에 대한 옵션 값들을 정의되어 있다.
- systemctl 을 이용하여 서비스를 시작하면 systemd는 해당 유닛 파일이 존재하는지 확인하고, 없으면 같은 이름으로 된 init 스크립트 파일을 찾아 실행하지만 systemd가 모든 init 스크립트를 실행할 수 있는 것은 아니다.
추가로 init을 사용하는 시스템이면 초기화 명령어들이 쉘 스크립트 형식으로 적혀 있지만, systemd 시스템에서는 unit 파일들을 통해 더욱 직관적인 보기가 가능해졌다.
<service unit의 [service] 섹션의 옵션>
(1) type : service unit의 유형
- simple
- forking
- oneshot
- dbus
- notify
(2) ExecStart : unit 이 시작할 때 실행할 명령이나 스크립트 경로
- ExecStartPre : ExecStart 이전에 실행될 사용자 정의 명령어 지정
- ExecStartPost : ExecStart 이후에 실행될 사용자 정의 명령어 지정
(3) ExecStop : unit이 Stop 되었을 때, 실행할 명령이나 스크립트
(4)ExecReload : unit이 Reload 되었을 때, 실행할 명령이나 스크립트
(5)Restart — 활성화되면, 이미 중지되어 있는 unit을 제외한 unit이 종료되면 서비스를 재시작
(6)RemainAfterExit (default : False이며 보통 Type=oneshot과 함께 사용) : True로 세팅되었을 경우, 서비스는 모든 프로세스가 종료되어도 실행 상태인 것으로 간주한다.
2. Device Unit
- sys/udev 장치 트리에 등록된 정보를 담고 있다.
- 하드웨어가 추가되거나 디스크를 파티셔닝 한 경우, 생성된다.
- Device Unit의 경우, unit 파일에 [Device] 섹션이 따로 존재하지 않고, systemd가 ‘systemd’라는 udev tag 가 표시된 모든 장치의 Device Unit 파일을 동적으로 생성한다.
3. Mount Unit
- 마운트 포인트를 관리하는 유닛
- 사용자가 파일시스템이 생성된 파티션 장치를 마운트 포인트에 연결하면 Mount Unit이 생성되고 마운트를 해제하면 Mount Unit이 제거됨
- 즉 /etc/fstab 파일에 마운트 정보를 등록한 뒤, 시스템을 재부팅하면 Mount Unit 파일이 생성된다. Mount Unit은 파일에서 [Mount]섹션에 정보가 저장된다.
4. Automount Unit
- 자동마운트 유닛은 유닛 파일에서 [Auto-mount]섹션에 정보가 저장된다.
5. Swap Unit
- 스왑 영역을 관리하는 유닛
- 스왑 영역을 활성화하면 스왑 영역으로 사용되는 (파티션 장치나 파일)이름 뒤에 .swap 확장자가 추가된 유닛이 생성된다.
6. Target Unit
- init 프로세스에서 런 레벨과 매핑되는 유닛
7. Path Unit
- 특정 파일시스템이나 디렉토리를 모니터링하기 위한 정보를 저장
- [Path]섹션에 저장되며, 같은 이름의 service unit이 존재한다.
8. Timer Unit
- crontab 같이 일정 주기마다 유닛을 실행 할 때 사용하는 유닛
- 같은 이름의 service unit이 존재한다.
9. Snapshot Unit
- 특정시점의 모든 유닛상태를 저장하는 저장하는 유닛
- 파일 형태로 저장되지 않는다.
- systemctl snapshot(스냅샷 생성), systemctl isolate(스냅샷 사용), systemctl delete(스냅샷 제거)
10. Socket Unit
- systemd에 의해 제어되는 IPC(Inter Process Communication), 네트워크 소켓, 파일 시스템의 파일 입출력(FIFO)에 대한 정보를 가지고 있는 unit
- [Socket] 섹션에 저장되며 socket unit은 같은 이름을 가진 service unit이 존재한다.
11. Scope Unit
- 유닛 파일에 의해 구성되지 않고, 오직 systemd의 bus interface를 이용하여 계획적으로 생성된다.
- 프로세스의 집합을 관리하며 서비스 유닛과 다르게 외부적으로 생성된 프로세스를 관리하고 자식프로세스를 생성하지 않는다.
- 자원을 조직화하고 관리하기 위해 시스템 서비스 작업 프로세스들을 그룹화시키는 것이 목적이며, 특정 scope unit의 상태를 확인하면 CGroup(Control Group)으로 여러 개의 프로세스가 그룹화 된 것을 확인 가능하다.
12. Slice Unit
- 해당 유닛에는 별도의 [Slice] 섹션이 존재하지 않는다.
- 슬라이스 유닛은 프로세스 그룹의 자원을 계층적으로 관리하기 위한 개념으로 슬라이스 유닛은 CGroup 트리에 하나의 노드를 생성하므로써 자원을 관리한다.
- slice unit은 프로세스에 자원을 제한하거나 할당하는 역할을 한다.
unit file 작성과 관련하여 더 자세한 내용은 https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files 을 참고 바란다. (근데 영어다.)
2) 프로세스 관리
systemd 는 systemctl 이라는 유틸을 통해서 서비스의 상태를 모니터링 및 관리한다. systemctl status <service> 명령어를 사용하여 서비스의 상태를 확인할 수 있다. systemctl --failed 명령어를 통해 실패한 서비스만을 출력하는 것도 가능하다.
위에서는 서비스 상태만을 확인하는 예를 써두었지만 다른 유닛들을 확인할 수도 있다.
<service 관리하는 명령어>
- enable: 서비스를 등록한다. 새로 시스템을 부팅 시 활성화된다.
- disable: 서비스를 해제한다. 새로 시스템을 부팅 시 활성화 하지 않는다.
- start: 지금 서비스를 시작한다. 일회성으로 시스템 재부팅 시 enable이 되어 있지 않다면 실행되지 않는다.
- stop: 지금 서비스를 종료한다.
- restart: 지금 서비스를 시작한다. 만약 기존에 동작중인 서비스가 있다면, 서비스 종료 후 재시작한다.
3) 시스템 관리
아래의 systemd daemon들은 /etc/systemd 경로에서 확인할 수 있다.
- - systemd : init 데몬
- systemd-journald : 다른 데몬(프로세스)들의 출력(syslog, 표준, 에러 출력), 로그 저장 데몬
- systemd-udevd : 장치 관리자 데몬. 예를 들어 usb를 연결하면 특정 폴더에 마운트 되도록 할 수 있다.
- systemd-logind : 사용자 로그인, 세션 등 관리 데몬
- systemd-networkd : 네트워크 관리 데몬. WIFI 연결, DHCP 활동 뿐만 아니라 Virtual Lan 설정까지 가능하다.
- systemd-resolved : DNS 해석 데몬
- systemd-timesyncd : NTP로 시스템 시간을 네트워크 시간과 동기화 시켜주는 데몬
- systemd-boot : UEFI 부트로더
4) 유틸리티 제공
가장 기본적으로 많이 사용되는 utility는 systemctl , journalctl 이 있다. journalctl 을 사용하여 시스템 서비스 및 커널의 로그를 확인할 수 있다.
# 시스템 로그 출력
journalctl
# 도움말 옵션
journalctl -h
# 최근 메시지만 확인
journalctl -n <메시지 갯수>
'OS' 카테고리의 다른 글
[ Storage ] DAS NAS SAN (0) | 2024.11.08 |
---|---|
[ Linux ] 로그 아키텍처 (Log Architecture) (4) | 2024.11.06 |
[ Linux ] Daemon - SysVinit & Systemd (0) | 2024.11.02 |
[ Monitoring ] AWS EC2 CloudWatch Metrics (0) | 2024.10.30 |
[RHEL] dnf-automatic 을 이용한 패키지 업데이트 자동화 (4) | 2024.10.29 |