linux systemd(systemctl) 로 run level(target) 관리하기



run level

Unix 계열과 Linux 는 부팅시에 시스템이 어떤 수준으로 기능을 제공할지 정하는 런 레벨(run level) 이라는 개념이 있었습니다. 

linux 도 런 레벨을 따랐지만 systemd(systemctl) 가 도입되고 나서 run level 은 target 이라는 용어로 변경되었고 target 을 설정하고 반영하는 명령어도 변경되었습니다.


다음은 run level 의 종류와 systemd 의 target 의 비교표입니다.

런 레벨target의미
0poweroff.target시스템 중단(Halt)
1rescue.target텍스트 기반의 단일 사용자 모드(single user mode)
2multi-user.target사용되지 않음(사용자가 지정 가능)
3multi-user.target텍스트 기반의 다중 사용자 모드
4multi-user.target사용되지 않음(사용자가 지정 가능)
5graphical.target X 윈도 기반의 다중 사용자 모드(로그인도 X 윈도에서 이뤄짐)
6reboot.target시스템 리부팅


Target 관리

기본 타겟 확인

시스템의 기본 타겟을 확인하려면 get-default 명령어를 사용합니다. 보통 GUI 환경이라면 graphical.target 이며 서버로 사용하는 경우 multi-user.target 이 적당합니다.

$ systemctl get-default
 
multi-user.target


타겟 목록 출력

시스템이 지원하는 전체 타겟 목록을 확인하려면 list-units --type target 를 사용하면 됩니다.

$ systemctl list-units --type target
 
UNIT                  LOAD   ACTIVE SUB    DESCRIPTION
basic.target          loaded active active Basic System
cryptsetup.target     loaded active active Encrypted Volumes
getty.target          loaded active active Login Prompts
local-fs-pre.target   loaded active active Local File Systems (Pre)
local-fs.target       loaded active active Local File Systems
multi-user.target     loaded active active Multi-User System
network-online.target loaded active active Network is Online
network.target        loaded active active Network
paths.target          loaded active active Paths
remote-fs.target      loaded active active Remote File Systems
slices.target         loaded active active Slices
sockets.target        loaded active active Sockets
sound.target          loaded active active Sound Card
swap.target           loaded active active Swap
sysinit.target        loaded active active System Initialization
timers.target         loaded active active Timers
 
LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type


기본적으로는 활성화된 타켓만 출력하는데 모든 타켓을 출력하려면 --all 옵션을 추가하면 됩니다.

$ systemctl list-units --type target --all

비활성화된 타겟중에는 복구 모드(rescue, emergency) 도 포함되어 있습니다.


기본 타겟 변경

기본 타켓은 set-default 명령으로 변경할 수 있습니다. 다음은 타겟을 서버에 적당한 GUI 없는 multi-user.target 으로 변경합니다.

$ sudo systemctl set-default multi-user.target


개인 PC 라면 desktop 을 사용하는 경우가 많으므로 graphical.target 으로 변경합니다.

$ sudo systemctl set-default graphical.target


타겟 즉시 적용

set-default 로 수정하면 재부팅시에 반영됩니다. isolate 명령을 사용하면 현재 세션에 즉시 반영됩니다.

$ sudo systemctl isolate multi-user.target


응급 및 복구 모드

시스템 복구등의 이유로 single user mode 로 진입할 필요가 있을 경우 rescue 명령어 사용하면 됩니다.

$ sudo systemctl rescue


파일 시스템이 깨지는등 시스템의 손상이 심각한 경우 single mode 로 진입할 수 없습니다. 이런 경우는 emergency 로 들어가면 root 파일 시스템은 read only 로 마운트하고 다른 파일 시스템은 마운트를 안 하는 등 최소의 기능으로만 부팅하므로 응급 복구 가능합니다.

$ sudo systemctl emergency


같이 보기


Ref