기본적으로 systemd는 Debian 9의 기본값입니다. 하지만 /etc/init.d 디렉토리에는 여전히 많은 내용이 있습니다. 이것은 부팅할 물건을 거기에 넣을 수 있다는 뜻인가요? 어떤 디렉토리가 먼저 실행됩니까(systemd 또는 init.d)?
답변1
systemd
시작 되거나 systemctl daemon-reload
실행 되면 스크립트 목록을 생성 하고 시스템 네이티브 단위가 이미 있는 경우를 제외하고 해당 단위를 생성하는 프로그램 systemd
을 실행합니다 .systemd-sysv-generator
/etc/init.d
.service
.service
생성기는 스크립트의 모든 LSB 헤더 블록을 해석합니다 init.d
. 그것들은 다음과 같습니다:
### BEGIN INIT INFO
# Provides: apache2
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Apache2 web server
# Description: Start the web server
# This script will start the apache2 web server.
### END INIT INFO
설명된 모든 종속성(여기 $local_fs $remote_fs $network $syslog $named
)은 해당 시스템 종속성으로 변환됩니다. 스크립트와 systemd 서비스 사이에 항상 간단한 일대일 매핑이 없기 때문에 생성기는 특히 init.d
일부 LSB 종속성(예 $remote_fs
: $network
, , $named
및 $portmap
)을 $time
해당 systemd 단위에 매핑합니다..target
자동으로 생성된 래퍼 서비스는 해당 init.d
스크립트를 실행합니다. basic.target
모든 래퍼 스크립트는 종속성이 허용하는 한 systemd 이후에 실행되도록 주문됩니다. 이는 LSB 헤더를 매우 중요하게 만듭니다. 생성기 메커니즘에 의존하고 종속성 목록이 불완전한 경우 systemd
해당 스크립트가 의존하는 것이 준비되기 전에 조기에 스크립트를 실행하려고 시도할 가능성이 높습니다 .init.d
일부 패키지 서비스에는 스크립트가 하나만 있을 수 있지만 init.d
시스템 서비스 파일은 두 개 이상 있을 수 있습니다(예: NFS 서비스). 이 경우 패키지는 생성기에 의존하지 않지만 스크립트 init.d
와 서비스 파일(겹치지 않는 이름 포함)을 모두 제공합니다. 패키지는 에 대한 /lib/systemd/system/<name of init script>.service
심볼릭 링크 도 제공합니다 /dev/null
. 이로 인해 systemd
init 스크립트에서 자동으로 생성된 서비스가 영구적으로 차단된 것으로 간주되고 기본 유닛 파일이 대신 서비스 프로세스를 처리합니다.