一度にアクティブにできるinitシステムは1つだけです。16.04では、systemdです。
多くのパッケージには、複数のinitシステム用のファイルが付属しているため、異なるOS上の複数のinitシステムで管理できます。Ubuntuでは、複数のinitシステム用のスクリプトがインストールされることがありますが、それらはすべて同時に使用されるわけではありません。
新しいinitシステムは、古いinitシステムとの互換性を維持しようとします。特に、systemdはUpstartとSysVの両方のinitスクリプトとの互換性を維持しようとします。
あなたが言及した「init.d」スクリプトの場合、それはUpstartスクリプトではなく「SysV」initスクリプトです。また、「/ etc / rc5.d」などのディレクトリにシンボリックリンクされている場合、「SysV」initスクリプトは起動時にのみ開始されます。Network Managerにはシンボリックリンクがインストールされていないことがわかります。
systemd古い「SysV」initスクリプトの管理方法を理解するには、systemdが/etc/init.d scirptsをどのように使用するかを参照してください。。
ここで、「service network-manager restart」を使用してNetwork Managerを再起動する理由についての質問に答えます。このserviceコマンドは、UpstartスクリプトとSysV initスクリプトの両方で使用され、前者を優先します。Network Managerには、16.04のUpstartスクリプトもインストールされてい/etc/init/network-manager.confます。
の出力を確認するとsudo strace service network-manager restart、何が起こっているのかを把握できます。最初に、出力systemctlが呼び出されていることを示し、コマンドがsystemdにリダイレクトされていることを示します。まず、開いた直後/usr/bin/serviceに、ファイルをシェルスクリプトとして読み取り始めることがわかります。
open("/usr/sbin/service", O_RDONLY) = 3
...
read(10, "#!/bin/sh\n\n#####################"..., 8192) = 8192
これがserviceシェルスクリプトであることがわかったので、ソースコードを確認できます。ソースコードでは、それis_systemdが検出されて設定されています。systemdの場合、コマンドがに書き換えられることがわかりますsystemctl restart network-manager。
したがって、3つのinitシステムは共存し、ある程度の互換性がありますが、複雑な層があります。今後の出来事の複雑さを最小限に抑えるには、systemdユニットファイルとsystemctlツールを使用してサービスを管理するのが最善です。