デフォルトでは、systemdはDebian 9のデフォルトです。しかし、/etc/init.dディレクトリにはまだ多くのコンテンツがあります。これは起動するものをそこに置くことができるという意味ですか?どのディレクトリが最初に実行されますか(systemdまたはinit.d)?
答え1
systemd
起動またはsystemctl daemon-reload
実行されると、スクリプトのリストを生成し、システムネイティブユニットがすでに存在する場合を除き、そのユニットを生成するプログラムをsystemd
実行します。systemd-sysv-generator
/etc/init.d
.service
.service
ジェネレータはスクリプトのすべてのLSBヘッダブロックを解釈しますinit.d
。それらは次のとおりです。
### BEGIN INIT INFO
# Provides: apache2
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Apache2 web server
# Description: Start the web server
# This script will start the apache2 web server.
### END INIT INFO
説明されているすべての依存関係(ここ$local_fs $remote_fs $network $syslog $named
)は、対応するシステム依存関係に変換されます。スクリプトとsystemdサービスの間に常に単純な1対1マッピングがないため、ジェネレータは特に一部のLSBinit.d
依存関係(たとえば$remote_fs
、、、、および)を対応するsystemd単位にマッピングします。$network
$named
$portmap
$time
.target
自動生成されたラッパーサービスはそのinit.d
スクリプトを実行します。basic.target
すべてのラッパースクリプトは、依存関係が許可する限り、systemd以降に実行するように注文されます。これはLSBヘッダーを非常に重要にします。ジェネレータメカニズムに依存し、依存関係リストが不完全な場合、そのスクリプトが依存する準備systemd
が整う前にスクリプトを早期に実行しようとする可能性が高くなります。init.d
一部のパッケージサービスにはスクリプトが1つしかありませんが、init.d
システムサービスファイルは2つ以上あります(NFSサービスなど)。この場合、パッケージはジェネレータに依存しませんが、スクリプトinit.d
とサービスファイル(重複しない名前を含む)の両方を提供します。パッケージはへの/lib/systemd/system/<name of init script>.service
シンボリックリンクも提供します/dev/null
。これにより、systemd
initスクリプトによって自動的に生成されたサービスが永久にブロックされたと見なされ、デフォルトのユニットファイルが代わりにサービスプロセスを処理します。