linux systemctl 명령으로 부팅 타겟(booting target) 지정하기

systemctl 명령어를 사용하면 부팅시 X-Windows(GUI) 나 CLI 환경을 지정할 수 있습니다.


systemd 이전

systemd 를 도입하기 전에는 init 프로세스에 사용할 run level 을 알려주는 telinit 명령어로 X-Windows 에서 Text 기반 커맨드 라인(command line)환경으로 또는 CLI 에서 GUI 로 변환할 수 있었습니다.

예로 다음 명령은 text 기반의 multi user 모드로 전환합니다.

$ sudo telinit 3

그래픽 사용자 환경으로 전환할 경우 run level 5번을 지정하면 됐습니다.

$ sudo telinit 5

systemd 사용

기본 타켓 확인

systemd 도입이후 기존의 servicechkconfig 명령어는 systemctl 명령어에 통합되었고 run level 은 target 이라는 이름으로 변경되었습니다.

  1. target 은 기존 SysV init 의 run level 과 같은 개념
  2. systemd 의 기본 타겟 명은 default.target 이며 다중 사용자 모드인 mutl-user.target 의 별칭


현재 기본 타켓은 다음 명령어로 알아볼 수 있습니다.

$ systemctl get-default
 
multi-user.target

multi-user 타켓은 예전 init 시절의 multi user 런 레벨인 3 과 동일하며 graphical.target 은 5번과 동일합니다.

전체 타켓 목록

전체 타겟 목록은 list-units 하위 명령어에 --type targe 옵션을 추가하면 됩니다.

$ systemctl list-units --type target

UNIT                   LOAD   ACTIVE SUB    DESCRIPTION                
basic.target           loaded active active Basic System               
cryptsetup.target      loaded active active Local Encrypted Volumes    
getty.target           loaded active active Login Prompts              
graphical.target       loaded active active Graphical Interface        
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  
...


활성화되지 않은 타겟(rescue, emergency 등) 목록도 출력하려면 --all 옵션 추가하면 됩니다.

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

UNIT                      LOAD      ACTIVE   SUB    DESCRIPTION                  
  basic.target              loaded    active   active Basic System                 
  cryptsetup.target         loaded    active   active Local Encrypted Volumes      
  emergency.target          loaded    inactive dead   Emergency Mode               
  getty-pre.target          loaded    inactive dead   Login Prompts (Pre) 
...

타켓 변경

부팅시 기본 타켓을 변경하려면 set-default 명령어 뒤에 타겟 명을 지정해 주면 됩니다. 다음 명령은 부팅시 GUI 환경인 X-Windows 로 진입하는 graphical.target 으로 설정합니다.

$ systemctl set-default graphical.target


서버를 운영한다면 X-Windows 를 삭제하고 CLI 환경으로 부팅하는 게 좋습니다. 다음 명령은 부팅시 Text 기반 멀티 유저로 타겟을 변경합니다.

$ systemctl set-default multi-user.target


재부팅없이 타켓 적용

telinit 처럼 재부팅없이 타겟을 변경하려면 isolate 명령어를 사용하면 됩니다. 다음 명령은 현재 타겟을 TEXT 기반 multi user 로 즉시 변경합니다.

$ systemctl isolate multi-user.target


만약 GUI 환경이 필요하다면 isolate 명령어 뒤에 graphical.target 을 지정하면 됩니다.

$ systemctl isolate graphical.target


복구 모드 사용

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

$ systemctl rescue


간혹 파일 시스템이 깨졌거나 /etc/fstab 를 잘못 설정해서 마운트를 못 하는 경우 싱글 모드로 진입이 불가능합니다.

이럴 때는 emergency 로 들어가면 부팅시 최소의 기능(root 파일 시스템은 read only 로 마운트하고 다른 파일 시스템은 마운트를 안 하는 등) 으로만 부팅하므로 응급 복구 가능합니다.

$ systemctl  emergency


같이 보기