방금 데비안 jessie로 전환했는데 그래픽 디스플레이 관리자를 포함해 대부분의 작업이 잘 실행되고 있습니다 wdm
.
문제는 이것이 어떻게 작동하는지 이해하지 못한다는 것입니다. 분명히 wdm을 미리 거기에 넣었을 때 시작되지 않았기 때문에 내 /etc/init.d/wdm
스크립트가 호출되었습니다 . 그러나 디렉토리 exit
이름을 바꾸기로 선택하면 (내 기본 실행 레벨은 3이었습니다) wdm은 여전히 시작됩니다./etc/rc3.d
systemd가 이 스크립트를 어떻게 찾는지 알 수 없으며 다른 모든 init.d 스크립트에서 수행되는 작업도 이해할 수 없습니다.
- systemd는 언제 어떻게 init.d 스크립트를 실행합니까?
- 장기적으로 init.d 스크립트를 모두 삭제해야 합니까?
답변1
카오스에 대한 대답은 일부 문서에 나와 있습니다. 그러나 그것은 systemd가 실제로 하는 일이 아닙니다. (이것은 Van Smulenberg가 한 일도 아닙니다 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
는 4개의 디렉토리입니다.
van Smoorenburg 스크립트와의 호환성 rc
은 systemd-sysv-generator
. 프로그램은 /usr/lib/systemd/system-generators/
디렉토리에 나열되므로 시작할 때마다 부팅 프로세스 초기에 systemd에 의해 자동으로 실행되고 나중에 systemd에 구성을 다시 로드하라는 지시가 있을 때마다 다시 실행됩니다.
이 앱은발전기, 3개의 추가 디렉터리(생성기 전용)가 있는 tmpfs에 서비스 단위 파일을 동적으로 생성하는 작업을 수행하는 도우미 유틸리티입니다. 동일한 이름을 가진 기존 기본 시스템 서비스 단위가 다른 6개 위치에서 발견되지 않으면 systemd-sysv-generator
van Smoorenburg 스크립트를 실행하는 서비스 단위가 생성됩니다.rc
/etc/init.d
시스템화된 서비스 관리는 서비스 단위만 알고 있습니다. 자동으로 (재)생성된 서비스 유닛은 van Smoorenburg rc
스크립트를 호출하기 위해 작성되었습니다. 그 중에는 다음이 포함됩니다.
[단위] 소스 경로=/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
systemd에 대한 기본 관계로 변환합니다. 런레벨은 시스템 세계에서 "구식"이므로 잊어버릴 수 있습니다./etc/rc2.d/
/etc/rc3.d/
/etc/rc4.d/
Wanted-By
multi-user.target
추가 읽기
- systemd-sysv-생성기. 시스템 매뉴얼 페이지. freedesktop.org.
- "빌드 프로세스의 환경 변수".
systemd.exec
. 시스템 매뉴얼 페이지. freedesktop.org. - https://unix.stackexchange.com/a/394191/5132
- https://unix.stackexchange.com/a/204075/5132
- https://unix.stackexchange.com/a/196014/5132
- https://unix.stackexchange.com/a/332797/5132
답변2
시스템은구버전과 호환되는SysV 초기화 스크립트를 사용하십시오. LSB 3.1에 따르면 초기화 스크립트에는 정보가 포함되어야 합니다.댓글 규칙, 스크립트를 시작/중지해야 하는 시기와 스크립트를 시작/중지하는 데 필요한 사항을 정의합니다. 예는 다음과 같습니다.
### 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가 초기화 스크립트가 다르다는 것입니다. SysV는 파일 이름의 숫자에 따라 스크립트를 순차적으로 실행합니다. Systemd는 그렇지 않습니다. 종속성이 충족되면 systemd는 스크립트 이름의 수에 관계없이 즉시 스크립트를 실행합니다. 그 중 일부는 주문 때문에 실패할 가능성이 높습니다. 다른 많은 것들이 있습니다호환되지 않음이 점을 고려해야 합니다.
동일한 서비스에 init 스크립트와 .service 파일이 있는 경우 종속성이 충족되면 systemd는 두 파일을 모두 실행합니다(init 스크립트의 LSB 헤더에 정의됨).