linux systemd(systemctl) 로 run level(target) 관리하기
systemd(system daemon) 을 관리하는 systemctl 명령어 사용법 의 축약 버전입니다.
run level
Unix 계열과 Linux 는 부팅시에 시스템이 어떤 수준으로 기능을 제공할지 정하는 런 레벨(run level) 이라는 개념이 있었습니다.
linux 도 런 레벨을 따랐지만 systemd(systemctl) 가 도입되고 나서 run level 은 target 이라는 용어로 변경되었고 target 을 설정하고 반영하는 명령어도 변경되었습니다.
다음은 run level 의 종류와 systemd 의 target 의 비교표입니다.
런 레벨 | target | 의미 |
---|---|---|
0 | poweroff.target | 시스템 중단(Halt) |
1 | rescue.target | 텍스트 기반의 단일 사용자 모드(single user mode) |
2 | multi-user.target | 사용되지 않음(사용자가 지정 가능) |
3 | multi-user.target | 텍스트 기반의 다중 사용자 모드 |
4 | multi-user.target | 사용되지 않음(사용자가 지정 가능) |
5 | graphical.target | X 윈도 기반의 다중 사용자 모드(로그인도 X 윈도에서 이뤄짐) |
6 | reboot.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
같이 보기
- systemd(system daemon) 을 관리하는 systemctl 명령어 사용법
- service 와 chkconfig
- Linux Rescue mode 로 부팅하기
- CentOS 8/RHEL 8 루트 암호를 잊어버렸을 때 복구하기(Reset root password in CentOS 8)