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

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

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