System Vスクリプトを見つけるためにsystemdが使用するデフォルトのパスは何ですか?

System Vスクリプトを見つけるためにsystemdが使用するデフォルトのパスは何ですか?

/etc/init.dデフォルトのSysVスクリプトをユニットファイルに変換し、そのファイルに置き換えるか、その逆に変換するためにsystemdジェネレータが使用するデフォルトの検索パスは何ですか/etc/rc?.d

したがって、回答@JdeBPの作成:

このプログラムは、9つのディレクトリのうち3つを含むtmpfsにサービス単位ファイルを動的に生成するタスクを実行する補助ユーティリティであるジェネレータです(ジェネレータでのみ使用されます)。他の6つの場所にすでに存在する同じ名前のデフォルトのシステムサービスユニットが見つからない場合、systemd-sysv-generatorSystem Vスクリプトを実行するサービスユニットが作成されます。rc/etc/init.d

しかし、Linuxの仕組みこの本では、いくつかの異なる内容について説明します。

  1. まず、systemdはrunlevel<N>.targetを有効にします。窒素実行レベルです。
  2. のすべてのシンボリックリンクに対して、/etc/rc<N>.dsystemdは次のスクリプトを認識します。/etc/init.d
  3. systemdはスクリプト名をサービスユニットに関連付けます(例:/etc/init.d/foo〜するfoo.service)。
  4. systemdはサービスユニットを有効にし、.txtファイルの名前に基づいて開始または停止引数を使用してスクリプトを実行しますrc<N>.d
  5. systemd は、スクリプト内のすべてのプロセスをサービスユニットに関連付けようとします。

私が知っている限り、プロセスは次のように動作します。 systemdはSysVスクリプトを探し、実行レベルに応じてsystemdは(または)/etc/init.dのシンボリックリンク名に基づいてスクリプトを起動または停止することを決定します。 SysVスクリプトがデフォルトのシステム単位ファイルに変換されると。K*S*/etc/rc?.d/etc/rc?.d

$ ls -l /etc/rc5.d
lrwxrwxrwx 1 root root 15 Aug  4 00:10 S01acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root 17 Aug  4 00:10 S01anacron -> ../init.d/anacron
lrwxrwxrwx 1 root root 16 Aug  4 00:10 S01apport -> ../init.d/apport
lrwxrwxrwx 1 root root 22 Aug  4 00:10 S01avahi-daemon -> ../init.d/avahi-daemon
...many more...

スクリプト内のすべてのシンボリックリンクは同じ実行順序01を持っていることがわかります。これは、systemdの並列性を利用して依存関係の順序(例えば、、)を決定するsystemd-sysv-generatorために意図的に行われました。/etc/rc?.dBeforeAfter

スクリプトのLSBヘッダーはスクリプトが実行される実行レベルを決定するので、スクリプトのLSBヘッダーでこれを行う方法がない限り、代わりにどのスクリプトがどの実行レベルで開始されるかを決定する基本的なsystemd-sysv-generatorアイデアを好みます。 。私の家は正しいですか?/etc/init.d/etc/rc?.d

systemd-sysv-ジェネレータ(8)

LSB headers[2]SysVのinitスクリプトが解釈され、ヘッダーで指定された順序が生成されたユニットと他のユニット間の依存関係に変換されます。 LSB機能"$remote_fs"、、、、はサポートされており、特定のデフォルトのsystemd"$network"ターゲットへの依存関係に変換されます。"$named""$portmap""$time"

ただし、マニュアルページにLSBヘッダーがない場合の言及はありません。ほぼ複雑すぎる:。

ベストアンサー1

ご質問を重複して表示させていただきます。

ここでJdeBPの素晴らしい答えを読んでください。systemdは/etc/init.dスクリプトをどのように使用しますか?

rc通常、System VスクリプトにはLSBヘッダーが必要であり、システムが付与した優先順位に関係なく並列に実行する必要があることが認められています/etc/rc?.d/。これはあらゆる点で間違っています。

実際にLSBヘッダーは必要ありません。そうでない場合、systemd-sysv-generatorはより制限された古いRedHatコメントヘッダーなどを認識できdescription:ますpidfile:。また、LSBヘッダーがない場合は、/etc/rc?.dシンボリックリンクフィールドの内容に戻り、リンク名にエンコードされた優先順位を読み取り、ここで順序の前後を構築してサービスをシリアライズします。 LSBヘッダーが必要ないだけでなく、シリアル化された項目の順序の前後にある程度エンコードされているだけでなく、ヘッダーがまったくないフォールバック動作は実際には明らかに非並列操作です。

/etc/rc3.dこれが重要でない理由は、/etc/rc?.d/別のディレクトリを介してスクリプトを有効にした可能性があるためです。 , と のいずれかのリストをsystemd-sysv-generatorsystemd との基本関係に変換します。ランレベルはシステムの世界で「昔ながら」なので忘れてしまうかもしれません。/etc/rc2.d//etc/rc3.d//etc/rc4.d/Wanted-Bymulti-user.target

実際に検索パスが何であるかについての質問は、質問に引用した内容で実際に解決されます。

systemd-sysv-generator他の6つの場所にすでに存在する同じ名前のデフォルトのシステムサービスユニットが見つからない場合、rcSystem Vスクリプトを実行するサービスユニットが作成されます。/etc/init.d

もっと詳しく:

  • スクリプト自体の場合:
    • systemd-sysv-generatorという環境変数を探しますSYSTEMD_SYSVINIT_PATH
    • 各ディレクトリは所有者実行権限ビットが設定されている通常のファイルを検索し、パスの以前のディレクトリは後でディレクトリを上書きします(このメカニズムは、デフォルトでは検索パスにディレクトリが1つしかない場合は実際には適用されません)。サービスユニットがあることを確認してください。同じ名前を使用すると、これらの乱数の生成は禁止されます。
  • 「symlink ファーム」の場合:
    • という同様の環境変数がありますSYSTEMD_SYSVRCND_PATH
    • 各ディレクトリで名前付きrc[2345].dサブディレクトリを検索します。順番にS2つの10進数で始まり、長さが4文字以上のディレクトリエントリを検索します。ディレクトリエントリは逆参照されません。

注意してくださいsystemd-sysv-generator

  • 見えない物事にK*
  • 確認しないでくださいシンボリックリンクファームは実際にシンボリックリンクでいっぱいです(シンボリックリンクは、関心のあるすべてのアイテムの文字特殊ファイルまたはFIFOです。ただ見ている名前.);そして
  • 進まなかったLSBコメント(つまりコメント)のDefault-Start:実行Default-Stop:レベル情報。

3番目の点に関して、バニラvan Smoorenburgでは、rcLSBアノテーションの実行レベル情報が起動/終了動作を直接制御しないことを覚えておいてください。これはシンボリックリンクファームディレクトリの責任です。システムの観点から、van Smoorenburg rc:Symlinkファームはサービスです。〜できるようにする制御は起動時に自動的に開始されるサービスを決定し、Default-Start:コメントはDefault-Stop:(非常におおよその)サービスです。基本制御、すなわちに変換コントロールを有効にします。

おすすめ記事