systemd는 /etc/init.d 스크립트를 어떻게 사용합니까?


120

방금 debian jessie로 전환했으며 그래픽 디스플레이 관리자를 포함한 대부분의 작업이 정상적으로 실행됩니다 wdm.

문제는 이것이 어떻게 작동하는지 이해하지 못한다는 것입니다. /etc/init.d/wdm내가 일찍 그것을 넣을 때 exitwdm이 시작되지 않기 때문에 분명히 내 스크립트가 호출됩니다 . 그러나 /etc/rc3.d 디렉토리의 이름을 바꾸면 (기본 기본 실행 수준은 3이 되었음) 여전히 wdm이 시작됩니다.

systemd 가이 스크립트를 찾는 방법을 알 수 없었으며 다른 init.d 스크립트에서 수행하는 작업을 이해하지 못했습니다.

  • 언제 어떻게 systemd init.d scrips를 실행합니까?
  • 장기적으로 모든 init.d 스크립트를 제거해야합니까?

답변:


166

혼돈의 대답은 일부 문서가 말하는 것입니다. 그러나 실제로 시스템이하는 일은 아닙니다. (반 스무 렌 부르크 rc가 한 일도 아닙니다 . 반 스무 렌 버그는rc 가장 먼저 정적 순서를 계산 하는 데 사용 된 LSB 헤더를 무시 하지 않았습니다insserv .) "비 호환성"페이지와 같은 Freedesktop 설명서는 실제로 잘못된 것입니다. 이것들과 다른 점들. ( HOME환경 변수는 실제로 예를 들어 설정되는 경우 많습니다.이 문서는 오랫동안 문서화되지 않은 상태였습니다. 최소한 설명서에 문서화되어 있지만 Freedesktop WWW 페이지는 여전히 수정되지 않았습니다.)

systemd의 기본 서비스 형식은 서비스 단위 입니다. systemd의 서비스 관리는 시스템 차원의 파일이 존재하는 9 개의 디렉토리 중 하나에서 읽은 것만 으로 작동합니다 .service. /etc/systemd/system, /run/systemd/system, /usr/local/lib/systemd/system, 및 /usr/lib/systemd/system해당 디렉토리의 네 가지입니다.

van Smoorenburg rc스크립트 와의 호환성 은이라는 이름의 변환 프로그램을 통해 달성됩니다 systemd-sysv-generator. 이 프로그램은 /usr/lib/systemd/system-generators/디렉토리에 나열되어 있으므로 부트 할 때마다 부트 스트랩 프로세스 초기에 시스템에 의해 자동으로 실행되며 나중에 systemd가 나중에 구성을 다시로드하라는 지시를받을 때마다 다시 실행됩니다.

이 프로그램은 제너레이터 로서, 9 개의 디렉토리 중 3 개 이상 (제너레이터 만 사용하도록되어있는)이있는 tmpfs에서 즉시 서비스 단위 파일을 작성하는 보조 유틸리티 유형 인 제너레이터입니다. 이름이 다른 6 개 위치에 이미 존재하는 기본 시스템 서비스 단위를 찾지 못한 경우 에서에서 systemd-sysv-generatorvan Smoorenburg rc스크립트 를 실행하는 서비스 단위를 생성합니다 /etc/init.d.

시스템 서비스 관리는 서비스 단위에 대해서만 알고 있습니다. 이 자동 (재생) 서비스 단위는 van Smoorenburg rc스크립트 를 호출하기 위해 작성됩니다 . 그들은 무엇보다도 :

[단위]
SourcePath = / etc / init.d / wibble
[서비스]
ExecStart = / etc / init.d / wibble 시작
ExecStop = / etc / init.d / wibble 정지

van Smoorenburg rc스크립트에는 LSB 헤더가 있어야하며 /etc/rc?.d/시스템이 부과하는 우선 순위를 따르지 않고 병렬로 실행 된다는 것이 지혜입니다 . 이것은 모든 점에서 올바르지 않습니다.

실제로 LSB 헤더가 필요하지 않으며 systemd-sysv-generator더 제한적인 오래된 RedHat 주석 헤더 ( description:, pidfile:등)를 인식 할 수 없는 경우 . 또한 LSB 헤더가 없으면 /etc/rc?.d심볼릭 링크 팜 의 내용으로 돌아가서 링크 이름으로 인코딩 된 우선 순위를 읽고 서비스에서 직렬화 / 이전 순서를 구성하여 서비스를 직렬화합니다. LSB 헤더는 요구 사항 일뿐만 아니라 사물을 어느 정도 직렬화하는 주문 전 / 후에 스스로 인코딩 할뿐만 아니라 완전 부재시의 폴백 동작은 실제로 크게 병렬화되지 않은 작업입니다.

/etc/rc3.d중요하지 않은 이유는 다른 /etc/rc?.d/디렉토리 를 통해 해당 스크립트를 활성화했기 때문일 수 있습니다. systemd-sysv-generator의에 표시되는 번역 /etc/rc2.d/, /etc/rc3.d/그리고 /etc/rc4.d/기본에 Wanted-Bysystemd의의 관계 multi-user.target. 시스템 수준에서는 실행 수준이 "더 이상 사용되지 않으며"잊어 버릴 수 있습니다.

추가 자료


2
데비안에서 system-generators 디렉토리는 / usr / lib에 있지 않지만 / lib packages.debian.org/sid/amd64/systemd/filelist
Braiam

5
이것은 바로 놀라운 답변입니다. 잘하셨습니다.
peelman

1
고마워요 고마워요 고마워요 데비안 8과 RH / CentOS 7 시스템의 혼합을 다루면서 SysVInit 대 Systemd 서비스 종속성 관리는 약간의 골치 거리가되었지만 systemd가 무엇을하고 있는지에 대한이 설명은 나의 이해에 크게 도움이되었습니다.
Toby

이 발전기는 작동합니다. 또한 추종자들에게 이전 버전이 systemd있고 /etc/init.d 스크립트가 "시작시 부팅"으로 설정되지 않은 경우 여전히 예상대로 작동하지만 표시 단위 목록 : unix.stackexchange.com/a/518894/8337
rogerdpack

이 발전기는 작동합니다. 추종자들에게 이전 버전의 systemd 및 /etc/init.d 스크립트가 "start on boot"로 설정되지 않은 경우 systemctl을 사용하여 예상대로 시작 / 중지되지만 unix.stackexchange.com/questions/517872/… 또한 show-units 목록에 나타나지 않습니다. 또한 NB는 더 이상 /etc/init.d/xx를 더 이상 직접 실행하여 시스템 서비스를 제어 할 수없는 기본적으로 "서비스 할 수없는"NB ... 실행중인 것과 그렇지 않은 것에 대해 혼란스러워 : |
rogerdpack

17

Systemd는 SysV init 스크립트와 호환 됩니다. LSB 3.1에 따르면, init 스크립트 에는 스크립트를 시작 / 중지해야하는시기와 스크립트를 시작 / 중지하는 데 필요한 사항을 정의하는 정보 주석 규칙 이 있어야합니다. 이것은 예입니다 :

### BEGIN INIT INFO
# Provides: my-service
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop service my-service
# Description: my-service blah blah ...
### END INIT INFO

이 섹션은 SysV에서 무시되는 주석 처리 된 섹션입니다. 반면에 systemd는 해당 종속성 정보를 읽고 그에 따라 해당 스크립트를 실행합니다.

그러나 systemd와 SysV가 init 스크립트 측면에서 다른 점이 있습니다. SysV는 파일 이름의 번호를 기준으로 스크립트를 순차적으로 실행합니다. 체계화되지 않습니다. 종속성이 충족되면 systemd는 스크립트 이름의 번호를 매기 지 않고 즉시 스크립트를 실행합니다. 그들 중 일부는 주문 때문에 아마도 실패 할 것입니다. 고려해야 할 다른 많은 비 호환성 이 있습니다.


동일한 서비스에 대한 초기화 스크립트와 .service 파일이있는 경우, 의존성이 충족되는 즉시 (system은 LSB 헤더에 정의 된 초기화 스크립트의 경우) systemd는 두 가지를 모두 실행합니다.


알았지 만 / lib / systemd / system /에 많은 .service 파일이 있습니다. systemd는 실제로 무엇을 실행합니까? 서비스 파일, 종속성 순서대로 init.d 스크립트 또는 둘 다에 지정된 것은 무엇입니까?
Martin Drautzburg

@MartinDrautzburg 그 답변에 추가했습니다
혼돈

1
부수적으로 데비안은 방금 LSB 호환성을 덤프한다고 발표했다 : article.gmane.org/gmane.linux.debian.devel.lsb/1103
Jan

systemd는 SysV 스크립트와 호환되는 모든 것입니다. 그 진술이 부정확 할뿐만 아니라, 참조 된 링크는 그것이 "대부분 호환 가능"하고 동일한 결과를 생성하는 데 필요한 노력의 양이 엄청나게 크다는 것을 명확하게합니다.
오스틴의 줄리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.