現在、開発プラットフォームを 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