Ubuntu 16.04에서 systemd가 어떻게 통합되는지 알 수 없습니다.

Ubuntu 16.04에서 systemd가 어떻게 통합되는지 알 수 없습니다.

현재 개발 플랫폼을 Ubuntu Xenial로 마이그레이션하고 있는데 Ubuntu가 init.d 스크립트를 systemd와 통합하는 방법을 알 수 없습니다. 예를 들어 기본 저장소에 포함된 MariaDB에 대한 유일한 서비스 재시작을 살펴보십시오.

    root@xenial:/etc/init.d# /etc/init.d/mysql restart
    [ ok ] Restarting mysql (via systemctl): mysql.service.

스크립트를 살펴보니 systemd를 어떻게 호출하는지 전혀 알 수 없습니다. 그렇다면 "(systemctl과)"을 통합하기 위해 어떤 종류의 해킹을 하고 있습니까?

이로 인해 제가 실제로 하려는 것은 systemd를 사용하여 인수를 전달할 수 있게 되는 것입니다.

따라서 전체적으로 Ubuntu Xenial의 systemd 초기화 통합은 얼마나 진행되고 있습니까? 아니면 실제로는 이전 버전과의 호환성을 위한 일련의 해킹입니까? 나는 모든 것이 이러한 새로운 서비스 파일로 변환되었음을 발견할 것으로 기대했습니다.

답변1

스크립트 init.d는 LSB 패키지에서 일부 bash 기능을 제공합니다.

. /lib/lsb/init-functions

다른 패키지에서 다른 패키지를 로드합니다.

# Include hooks from other packages in /lib/lsb/init-functions.d
for hook in $(run-parts --lsbsysinit --list /lib/lsb/init-functions.d 2>/dev/null); do
    [ -r $hook ] && . $hook || true
done

시스템이 자체 리디렉션을 주입하는 경우

~$ dpkg -S /lib/lsb/init-functions.d/40-systemd 
systemd: /lib/lsb/init-functions.d/40-systemd

메모:다음을 사용하여 발견됨strace /etc/init.d/.. status

관련 정보