티스토리 뷰
[리눅스/Linux] init 프로세스, 런레벨 개념/변경, systemd 개념/명령(systemctl, telinit, init)
hrniin 2021. 1. 27. 15:31
systemd는 리눅스의 시스템과 서비스 관리자로서, 유닉스의 init 프로세스가 하던 작업을 대신 수행한다.
init 프로세스
스크립트(설정 파일)를 순차적으로 실행하여 다른 프로세스를 동작시켰다. man init로 확인해보면 systemd에 대한 설명이 출력된다. init가 systemd로 대체된 것이다.
systemd 이전에 init 대신 사용해온 upstart와 관련된 스크립트 파일은 /etc/init 디렉터리에 '작업명.conf' 파일로 구성되어 있다. (현재는 몇 개의 스크립트만 남아있음) init과 관련된 스크립트 파일은 /etc/init.d 디렉터리에 있으며 아직 일부 서비스의 스크립트 파일이 남아 있다.
init와 런레벨
init 프로세스에서 시스템의 단계를 일곱 개로 구분하고 각 단계에 따라 셸 스크립트를 실행하는 단계들을 런레벨이라고 한다. 런레벨 2, 3, 4번이 동일하므로 런레벨 별 스크립트가 저장된 /etc/rc2.d, /etc/rc3.d, /etc/rc4.d 디렉터리의 내용이 모두 같다. 런레벨 별로 실행하는 스크립트 파일은 /etc/init.d 디렉터리에 있는 파일에 대한 심벌릭 링크이다. 즉 init 프로세스에서 사용했던 런레벨 단계들을 systemd에서도 동일하게 사용하고 있다.
systemd 개념
(* 장점 : 소켓 기반으로 동작하여 inetd와 호환성을 유지/셸과 독립적으로 부팅 가능/마운트 제어 가능/fsck 제어 가능/시스템 상태에 대한 스냅숏을 유지/SELinux와 통합 가능/서비스에 시그널을 전달/shutdown 전에 사용자 세션의 안전한 종료 가능)
systemd는 전체 시스템을 시작하고 관리하는 데 유닛(unit)이라 부르는 구성 요소를 사용한다. systemd는 관리 대상의 이름을 ‘서비스명.유닛 종류’의 형태로 관리하는데, 각 유닛은 같은 이름과 종류로 구성된 설정 파일과 동일한 이름을 사용한다. 유닛과 관련한 보다 자세한 내용은 ‘man systemd.유닛명’으로 확인할 수 있다.
systemd 관련 명령(systemctl)
systemctl : 현재 동작 중인 유닛 출력. (active만)
systemctl -a : 전체 유닛이 출력. (active/inactive 모두)
systemctl -t 유닛명 : 해당 유닛만 출력.
systemctl start 유닛명 : 해당 유닛 서비스를 시작.
systemctl status 유닛명 : 해당 유닛의 상태를 확인.
systemctl stop 유닛명 : 해당 유닛 서비스르 정지.
systemd와 런레벨(런레벨 변경하기)
런레벨은 현재 시스템의 상태를 나타내는 한 자리 숫자(문자 S, s 포함)이다. 표 8-3의 파일들은 /lib/systemd/system 디렉터리에 있음
systemctl get-default : 현재 target 확인.
systemctl set-default target 파일명 : 부팅할 때 동작할 기본 런레벨 지정.
systemctl isolate target 파일명 : 런레벨(target) 변경. (이 때 확장자 .target을 제외하고 입력. ex: systemctl isolate multi-user)
init 런레벨 : 런레벨 변경. (ex: init 3)
telinit 런레벨 : 런레벨 변경. (ex: telinit S)
* telinit와 init는 systemd에 대한 심볼릭 링크.
* 단일 사용자 모드로 전환하기(런레벨 1)
시스템에 문제가 있을 경우 단일 사용자 모드로 전환하여 시스템 관리자만 사용할 수 있도록 한다.
- systemctl isolate rescue
- systemctl isolate runlevel1
- init 1
- init s
- init S
- telinit 1
- telinit s
- telinit S
'cs > linux' 카테고리의 다른 글
[리눅스/Linux] 데몬 프로세스 (데몬의 동작 방식/슈퍼데몬/데몬의 조상) (0) | 2021.01.27 |
---|---|
[리눅스/Linux] 리눅스 시스템 종료 방법 (0) | 2021.01.27 |
[리눅스/Linux] 리눅스의 부팅 과정 (0) | 2021.01.27 |
[리눅스/Linux] 디스크 사용량 확인(df, du), 파일 시스템 검사/복구(fsck, e2fsck, badblocks, dumpe2fs) (0) | 2021.01.26 |
[리눅스/Linux] 리눅스에 장치 연결하기(마운트) (0) | 2021.01.26 |