Search

디폴트 런레벨 변경

요약
systemctl set-default [multi-user|graphical].target
게시일
2021/02/08
태그
Linux
1 more property
리눅스 서버가 GUI 환경이라 쓸데없이 메모리를 많이 먹어서 기본 실행레벨을 CLI로 변경했다. 그냥 데스크탑 환경을 제거하면 되지만, 그러기엔 좀 아까워서…

runlevel?

유닉스 계열 운영체제는 실행 수준(runlevel)이라는 개념이 존재한다. 런레벨에 따라 운영 모드가 달라진다. 저수준에서는 한명의 사용자만 로그인이 가능하다. 중간 단계에서는 다중 사용자 환경을 제공한다. 흔히 우리가 서버에서 사용하는 단계가 다중 사용자(multi-user level) 환경이다. 그 다음 단계는 GUI 로그인이 가능한 환경이다. 리눅스에서는 런레벨을 이런 식으로 구분한다.
런레벨
타겟 유닛
운영 방식
0
runlevel0.target / poweroff.target
Shutdown (Poweroff)
1
runlevel1.target / rescure.target
Single user mode
2
runlevel2.target / multi-user.target
Multi-user mode
3
runlevel3.target / multi-user.target
Multi-user mode
4
runlevel4.target / multi-user.target
Multi-user mode
5
runlevel5.target / graphical.target
Graphical mode
6
runlevel6.target / reboot.target
Reboot
런레벨에 따라 실행하는 서비스 유닛도 달라진다. 다중 사용자 모드는 GUI 환경 실행에 쓰이는 서비스 데몬들을 실행할 이유가 없으므로 wayland나 xserver와 같은 데몬을 실행하지 않는다. 이런 데몬들은 런레벨이 5로 변경되면 그제야 시작한다.
런레벨 2~4는 실질적인 차이가 없고, 모두 동일한 다중 사용자 환경이다.

런레벨 확인하기

실행 중인 런레벨은 runlevel 명령으로 확인한다.
이 명령은 이전에 실행 중이던 런레벨과 현재 런레벨을 보여준다. 'N'으로 이전 런레벨이 표시된 건 시스템이 중지된 상태에서 시작했기 때문이다. 런레벨을 3(multi-user mode)에서 graphical mode로 변경했다면 3 5로 나타난다.
내 기억으로는 System V init 데몬이 모든 프로세스를 관장하던 시절에는 runlevel 명령어로 변경했던 것같은데, 이 명령어로 런레벨을 변경할 수는 없다. systemd가 런레벨을 제어하는 대부분의 배포본은 실제로 runlevel 명령어를 갖고 있지 않다. systemctl로 연결되는 심볼릭 링크일 뿐이다(readlink -e $(command -v runlevel) 명령을 실행해보라). 실제로 런레벨을 확인하는 명령은 이것이다: systemctl get-default
런레벨을 정의하는 타겟 유닛 파일들의 위치는 배포본에 따라 다르다. 크게 보면 레드햇 계열과 데비안 계열에서 systemd가 사용하는 시스템 유닛 파일들이 저장되는 경로는 다음 명령으로 확인할 수 있다:
pkg-config systemd --variable=systemdsystemunitdir # RHEL derivatives: /usr/lib/systemd/system # Debian derivatives: /lib/systemd/system
Bash
복사
명령을 실행해보면 다음과 비슷할 것이다.
runlevel*.target은 각각 다른 target 파일에 연결된 모두 심볼릭 링크다. 참고로, .target으로 끝나는 유닛 파일은 다른 유닛(예: service, mount, socket, timer, job)을 제어하는 역할을 한다. 특히 service 파일들은 실제 서비스 데몬 실행에 필요한 내용을 담고 있고, timer 파일들은 주기적으로, 또는 지정된 범위 안에서 무작위로 실행할 작업들을 정의한다.

런레벨을 변경하려면

이제 이 명령으로 GUI를 사용하지 않도록 런레벨을 변경할 수 있다:
systemctl set-default multi-user.target
Bash
복사
결론은 참 심플하지만, 어디까지나 내가 잊지 않으려고 적어둔다… ㅎㅎㅎㅎ
PS. 서버 버전, 또는 minimal install 버전을 선택해 설치하면 이런 쓸데 없는 짓을 하지 않아도 된다. 보통 배포본은 데스크탑 버전과 서버 버전을 각각 릴리즈하는데, 서버 버전은 보통 GUI를 제공하지 않으니 그걸 쓰면 될 일이다.