systemdは/etc/init.dスクリプトをどのように使用しますか?


120

私はちょうどdebian jessieに切り替えましたが、グラフィカルディスプレイマネージャーを含め、ほとんどのものは問題なく動作しますwdm

事は、私はこれがどのように機能するか理解していないだけです。/etc/init.d/wdmスクリプトを呼び出すのは明らかです。なぜなら、私exitがそこに早く入れたとき、wdmが開始されないからです。しかし、代わりに/etc/rc3.dディレクトリーの名前を変更すると(私のデフォルトのランレベルは3でした)、wdmはまだ開始されています。

systemdがこのスクリプトを見つける方法を見つけることができず、他のすべてのinit.dスクリプトに対して何が行われるのか理解できません。

  • systemdはいつ、どのようにinit.d scripsを実行しますか?
  • 長期的には、すべてのinit.dスクリプトを削除する必要がありますか?

回答:


166

カオスの答えは、いくつかのドキュメントが言っていることです。しかし、それはsystemdが実際に行うことではありません。(これは、バンSmoorenburgではない何rcのいずれか。、やった バンSmoorenburgがrc最も間違いなかった LSBヘッダ、無視insserv、Freedesktopのマニュアルを参照して、その結果、「非互換性」ページとして初心者のための静的な順序付けを計算するために使用されるが、。)に、実際には間違っていますこれらおよび他のポイント。(HOME実際、環境変数しばしば設定されます。これは長い間どこでもまったく文書化されていませんでした。少なくともマニュアルには文書化されましたが、Freedesktop WWWページはまだ修正されていません。)

systemdのネイティブサービス形式はサービスユニットです。systemdの適切なサービス管理は、それらに関してのみ機能し、(システム全体の).serviceファイルが存在できる9つのディレクトリの1つから読み取ります。 /etc/systemd/system/run/systemd/system/usr/local/lib/systemd/system、および/usr/lib/systemd/systemこれらのディレクトリの4です。

van Smoorenburg rcスクリプトとの互換性は、という名前の変換プログラムで実現されsystemd-sysv-generatorます。このプログラムは/usr/lib/systemd/system-generators/ディレクトリにリストされているため、ブートするたびにブートストラッププロセスの早い段階でsystemdによって自動的に実行されます。

このプログラムはジェネレーターであり、補助的なユーティリティの一種であり、その目的はサービスユニットファイルをオンザフライで作成することであり、9つのディレクトリのうちさらに3つ(ジェネレーターのみが使用することを意図)がtmpfsにあります。 他の6つの場所に既に存在するその名前のネイティブsystemdサービスユニットが見つからない場合systemd-sysv-generator、van Smoorenburg rcスクリプトを実行するサービスユニットを生成し/etc/init.dます。

systemdサービス管理は、サービス単位のみを知っています。これらの自動(再)生成されたサービスユニットは、van Smoorenburg rcスクリプトを呼び出すために記述されています。特に以下のものがあります。

[単位]
SourcePath = / etc / init.d / wibble
[サービス]
ExecStart = / etc / init.d / wibble start
ExecStop = / etc / init.d / wibble stop

van Smoorenburg rcスクリプトにはLSBヘッダーが必要であり、/etc/rc?.d/システムによって課せられた優先順位を尊重せずに並行して実行されるというのが、広く知られています。これはすべてのポイントで正しくありません。

実際に、彼らはLSBヘッダを持っている必要はありません、そして、彼らはしていない場合はsystemd-sysv-generator(より限定された古いRedHatのコメントヘッダを認識することができdescription:pidfile:など)。さらに、LSBヘッダーがない場合、/etc/rc?.dシンボリックリンクファームのコンテンツにフォールバックし、リンク名にエンコードされた優先順位を読み取り、それらからの前後の順序を構築し、サービスをシリアル化します。LSBヘッダーが要件ではないだけでなく、物事をある程度シリアル化する順序付けの前後にヘッダー自体をエンコードするだけでなく、完全に存在しない場合のフォールバック動作は、実際には大幅に非並列化された操作です。

/etc/rc3.d重要ではないように思われる理由は、おそらく別の/etc/rc?.d/ディレクトリを介してそのスクリプトを有効にしていたからです。 systemd-sysv-generatorいずれかに記載されているされて平行移動さ/etc/rc2.d//etc/rc3.d/および/etc/rc4.d/ネイティブにWanted-Byにsystemd年代との関係multi-user.target。実行レベルはsystemdの世界では「時代遅れ」であり、忘れることができます。

参考文献


2
Debianでは、system-generatorsディレクトリは/ usr / libには存在しませんが、/ lib packages.debian.org/sid/amd64/systemd/filelist
Braiam

5
これはまっすぐに驚くべき答えです。よくやった。
ピールマン

1
ありがとう、ありがとう、これに感謝!Debian 8とRH / CentOS 7システムの混在に対処することで、SysVInitとSystemdサービスの依存関係管理の管理が少し頭痛になりましたが、systemdが何をしているかのこの説明は私の理解に大いに役立ちました。
トビー

このジェネレーターは動作します。また、フォロワーについては、古いバージョンがsystemdあり、/ etc / init.dスクリプトが「起動時に起動」に設定されていない場合、期待どおりに動作しますが、 show-unitsリスト:unix.stackexchange.com/a/518894/8337
rogerdpack

このジェネレーターは動作します。また、フォロワーのために、古いバージョンのsystemdと「起動時に起動」に設定されていない/etc/init.dスクリプトがある場合、systemctlを使用して期待どおりに起動/停止しますが、 'show-unitsリストには表示されません:unix.stackexchange.com/questions/517872 / ...また、/ etc / init.d / xxを直接実行するか、systemdが取得してこれらのサービスを基本的に「制御できない」ことにも注意してください。 ...実行されているものと実行されていないものについて混乱している:|
rogerdpack

17

SystemdはSysV initスクリプトと下位互換性があります。LSB 3.1によると、initスクリプトには、スクリプトの開始/停止のタイミングと、スクリプトの開始/停止に必要な内容を定義する情報コメント規則が必要です。これは一例です:

### BEGIN INIT INFO
# Provides: my-service
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop service my-service
# Description: my-service blah blah ...
### END INIT INFO

これは、SysVによって無視されるコメントセクションです。一方、systemdはその依存情報を読み取り、それに応じてスクリプトを実行します。

ただし、systemdとSysVがinitスクリプトに関して異なる点が1つあります。SysVは、ファイル名の番号に基づいてスクリプトを順番に実行します。Systemdはしません。依存関係が満たされると、systemdはスクリプト名の番号付けを尊重せずに、スクリプトをすぐに実行します。それらのいくつかは、おそらく順序付けのために失敗するでしょう。考慮すべき他の多くの非互換性があります。


同じサービスのinitスクリプトと.serviceファイルがある場合、systemdは依存関係が満たされるとすぐに両方を実行します(initスクリプトの場合、LSBヘッダーで定義されたもの)。


わかりましたが、/ lib / systemd / system /にもたくさんの.serviceファイルがあります。systemdは実際に何を実行しますか?サービスファイル(依存関係の順序)、init.dスクリプト、またはその両方で指定されているものは何ですか?
マーティンドラウツブルク

@MartinDrautzburg私は答えにそれを追加しました
カオス

1
補足として、DebianはLSB互換性をダンプすることを発表しました:article.gmane.org/gmane.linux.debian.devel.lsb/1103
1

systemdは、SysVスクリプトと互換性があるものは何でもです。そのステートメントが間違っているだけでなく、参照されたリンクは、それが「ほとんど互換性がある」だけであり、同じ結果を生み出すのに必要な労力がとてつもなく膨大であることを明らかにしています。
オースティンのジュリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.