/etc/init.d
デフォルトのSysVスクリプトをユニットファイルに変換し、そのファイルに置き換えるか、その逆に変換するためにsystemdジェネレータが使用するデフォルトの検索パスは何ですか/etc/rc?.d
?
したがって、回答@JdeBPの作成:
このプログラムは、9つのディレクトリのうち3つを含むtmpfsにサービス単位ファイルを動的に生成するタスクを実行する補助ユーティリティであるジェネレータです(ジェネレータでのみ使用されます)。他の6つの場所にすでに存在する同じ名前のデフォルトのシステムサービスユニットが見つからない場合、
systemd-sysv-generator
System Vスクリプトを実行するサービスユニットが作成されます。rc
/etc/init.d
しかし、Linuxの仕組みこの本では、いくつかの異なる内容について説明します。
- まず、systemdは
runlevel<N>
.targetを有効にします。窒素実行レベルです。- のすべてのシンボリックリンクに対して、
/etc/rc<N>.d
systemdは次のスクリプトを認識します。/etc/init.d。- systemdはスクリプト名をサービスユニットに関連付けます(例:/etc/init.d/foo〜するfoo.service)。
- systemdはサービスユニットを有効にし、.txtファイルの名前に基づいて開始または停止引数を使用してスクリプトを実行します
rc<N>.d
。- 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?.d
Before
After
スクリプトの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-generator
systemd との基本関係に変換します。ランレベルはシステムの世界で「昔ながら」なので忘れてしまうかもしれません。/etc/rc2.d/
/etc/rc3.d/
/etc/rc4.d/
Wanted-By
multi-user.target
実際に検索パスが何であるかについての質問は、質問に引用した内容で実際に解決されます。
systemd-sysv-generator
他の6つの場所にすでに存在する同じ名前のデフォルトのシステムサービスユニットが見つからない場合、rc
System Vスクリプトを実行するサービスユニットが作成されます。/etc/init.d
もっと詳しく:
- スクリプト自体の場合:
systemd-sysv-generator
という環境変数を探しますSYSTEMD_SYSVINIT_PATH
。systemd-sysv-generator
存在する場合は、1つずつ検索される従来のコロンで区切られたディレクトリ検索パスであると予想されます。- 存在しない場合、またはNULL値がある場合は、次のようにします
systemd-sysv-generator
。コンパイルされたデフォルトはバニラシステムの単一ディレクトリです。/etc/init.d/
。
- 各ディレクトリは所有者実行権限ビットが設定されている通常のファイルを検索し、パスの以前のディレクトリは後でディレクトリを上書きします(このメカニズムは、デフォルトでは検索パスにディレクトリが1つしかない場合は実際には適用されません)。サービスユニットがあることを確認してください。同じ名前を使用すると、これらの乱数の生成は禁止されます。
- 「symlink ファーム」の場合:
- という同様の環境変数があります
SYSTEMD_SYSVRCND_PATH
。systemd-sysv-generator
存在する場合は、1つずつ検索される従来のコロンで区切られたディレクトリ検索パスであると予想されます。- 存在しない場合、またはNULL値がある場合は、次のようにします
systemd-sysv-generator
。コンパイルされたデフォルトはバニラシステムの単一ディレクトリです。/etc/rc.d/
。
- 各ディレクトリで名前付き
rc[2345].d
サブディレクトリを検索します。順番にS
2つの10進数で始まり、長さが4文字以上のディレクトリエントリを検索します。ディレクトリエントリは逆参照されません。
- という同様の環境変数があります
注意してくださいsystemd-sysv-generator
…
- …見えない物事に
K*
。 - …確認しないでくださいシンボリックリンクファームは実際にシンボリックリンクでいっぱいです(シンボリックリンクは、関心のあるすべてのアイテムの文字特殊ファイルまたはFIFOです。ただ見ている名前.);そして
- …進まなかったLSBコメント(つまりコメント)の
Default-Start:
実行Default-Stop:
レベル情報。
3番目の点に関して、バニラvan Smoorenburgでは、rc
LSBアノテーションの実行レベル情報が起動/終了動作を直接制御しないことを覚えておいてください。これはシンボリックリンクファームディレクトリの責任です。システムの観点から、van Smoorenburg rc
:Symlinkファームはサービスです。〜できるようにする制御は起動時に自動的に開始されるサービスを決定し、Default-Start:
コメントはDefault-Stop:
(非常におおよその)サービスです。基本制御、すなわちに変換コントロールを有効にします。