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 の init の 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

systemdが独自のリダイレクトを挿入する場所

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

注記:使用して見つかったstrace /etc/init.d/.. status

関連情報