지난 며칠 동안 대상(런레벨이라고 함)에 대한 모든 문서와 예제를 검토했지만 이 주제에 대해서는 여전히 혼란스럽습니다.
init의 실행 수준과 systemd의 대상 간의 차이점을 설명할 수 있는 사람이 있습니까? 시작 프로세스에 관한 한 유닛 파일이란 무엇입니까?
답변1
실행 수준 및 대상의 기본 사항
배경
sysV(init)에서 런레벨은 0~6의 숫자입니다. 시스템은 특정 런레벨(보통 3(네트워크 + 콘솔) 또는 5(X windows))로만 설정할 수 있습니다. sysV의 이러한 런레벨은 단순히 init
기본 프로세스가 주어진 시간에 있을 수 있는 상태입니다. systemd의 경우 대상은 비슷한 목적으로 사용되지만 여러 대상을 동시에 적용할 수 있습니다.
systemd에서 사용되는 대상은 런레벨과 비슷한 목적으로 사용되지만 약간 다르게 동작합니다. 각 대상은 번호가 지정되지 않고 이름이 지정되며 특정 목적을 수행하도록 설계되었으며 여러 대상이 동시에 활성화될 수 있습니다. 일부 목표는 다른 목표에서 모든 서비스를 상속하고 여기에 추가 서비스를 추가하여 구현됩니다. 일반적인 SystemVinit 런레벨을 모방하는 systemd 대상이 있으므로 익숙한 telinit RUNLEVEL 명령을 사용하여 대상을 계속 전환할 수 있습니다.
표적
이 기능을 염두에 두고 systemd에서는 네트워크가 있는 일반적인 시스템이지만 multi-user.target
X는 대상에서 실행되지 않습니다.
$ systemctl get-default
multi-user.target
그러나 목표는 여러 목표를 캡슐화(그룹화)한 것입니다. 이는 sysV에 비해 systemd의 주요 장점 중 하나입니다. 이는 개체 파일을 보면 알 수 있습니다.
systemd.target 매뉴얼 페이지이름이 ".target"으로 끝나는 장치 구성 파일은 시스템 대상 장치에 대한 정보를 인코딩하며 시작 시 장치 및 잘 알려진 동기화 지점을 그룹화하는 데 사용됩니다. ....
....이는 종속성(실행 대상으로 사용할 수 있음)별로 장치를 그룹화하고 장치 간 종속성에 사용되는 동기화 지점에 대한 표준화된 이름을 설정하기 위해서만 존재합니다. 또한 대상 장치는 기존 SysV init 시스템의 SysV 런레벨을 보다 유연하게 대체합니다. (호환성을 이유로 systemd의 SysV 런레벨 호환성 코드에서 사용되는 runlevel3.target과 같은 특수 대상 유닛이 존재합니다. 자세한 내용은 systemd.special(7)을 참조하세요.)
예를 들어:
$ grep target /usr/lib/systemd/system/anaconda.target
Requires=basic.target
After=basic.target
노트:여기서 anaconda.target
요구 사항이 basic.target
실행되었으며 이후에 실행되어야 합니다 basic.target
.
내 CentOS 7.x 시스템에서 어떤 대상이 로드되었는지 확인할 수 있습니다.
$ 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-pre.target loaded active active Login Prompts (Pre)
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
nfs-client.target loaded active active NFS client services
paths.target loaded active active Paths
remote-fs-pre.target loaded active active Remote File Systems (Pre)
remote-fs.target loaded active active Remote File Systems
rpc_pipefs.target loaded active active rpc_pipefs.target
slices.target loaded active active Slices
sockets.target loaded active active Sockets
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.
19 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
systemd의 단위는 무엇입니까?
systemd의 단위 파일은 5가지 중 하나를 정의하는 구성 파일입니다. 예를 들어 단위는 다음과 같습니다.
- 서비스(.service)
- 마운트 지점(.mount)
- 장치(.device)
- 소켓(.socket)
- 타겟(.target)
CentOS 7.x에서는 이 디렉터리에서 다음 단위 파일을 볼 수 있습니다.
$ for i in target socket service device mount;do ls -l /usr/lib/systemd/system | grep $i | head -3;done
-rw-r--r-- 1 root root 415 May 3 16:05 anaconda.target
-rw-r--r-- 1 root root 517 Apr 11 03:36 basic.target
drwxr-xr-x. 2 root root 4096 Jul 28 14:56 basic.target.wants
-rw-r--r-- 1 root root 874 Apr 10 23:42 avahi-daemon.socket
-r--r--r-- 1 root root 131 Apr 11 01:03 cups.socket
-rw-r--r-- 1 root root 102 Apr 11 03:23 dbus.socket
-rw-r--r-- 1 root root 275 Apr 27 10:53 abrt-ccpp.service
-rw-r--r-- 1 root root 380 Apr 27 10:53 abrtd.service
-rw-r--r-- 1 root root 361 Apr 27 10:53 abrt-oops.service
-rw-r--r-- 1 root root 169 Apr 12 15:28 [email protected]
-rw-r--r-- 1 root root 670 Apr 11 03:36 dev-hugepages.mount
-rw-r--r-- 1 root root 590 Apr 11 03:36 dev-mqueue.mount
전원 켜짐
systemd로 구축된 시스템이 시작되면 유닛 파일을 처리하여 마운트를 구축하고, 소켓을 설정하고, 서비스를 시작합니다. 이러한 순서는 유닛 파일에 의해 제어됩니다.