/etc/rc.d/init.d 詳細説明|プログラムは自動的に起動します

1. Linuxのブートプロセス

システムが起動した後、init.d に入る前に、システムが何を行ったかを見てみましょう。システムの電源がオンになった後、最初のハードウェア セルフテストが実行され、次にブートロードによってシステムが初期化され、カーネルがロードされます。

カーネルがメモリにロードされると、実行が開始されます。カーネルが起動して実行されると、ハードウェアの検査により、どのデバイス ドライバーを初期化する必要があるかが判断されます。

ここから、カーネルはルート ファイル システムをマウントできます (このプロセスは、Windows が C ドライブを識別してアクセスするプロセスに似ています)。カーネルはルート ファイル システムをマウントし、すべてのデバイス ドライバーとデータ構造を初期化した後、init と呼ばれるユーザー レベルのプログラムを開始してブート プロセスを完了します。

2. ランレベル(ランレベル)

Init プロセスはシステム起動後の最初のユーザー プロセスであるため、その pid (プロセス番号) は常に 1 です。init プロセスが起動すると、最初に/etc/ ディレクトリのinittab ファイル内の initdefault id 値を読み取ります。この値は、実行レベル (run-level)と呼ばれますこれにより、起動後にシステムがどのレベルで実行されるかが決まりますランレベルは、システム起動の動作と目的のほとんどを決定します。このレベルは 0 から 6 まであり、さまざまな機能があります。さまざまなランレベルは次のように定義されます。

# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 – 系统保留的
# 5 - X11 (x window)
# 6 - 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 )
  

inittab ファイル内の initdefault ID:
ここに画像の説明を挿入

3. /etc/rc.d/と/etc/rc.d/init.dの関係

ここまで書いたら、ほぼ init.d を入力するはずですが、/etc/rc.d/init.d だけを書いても伝わりにくいと思うので、これとその上で /etc/rc.d を使用します。第 1 レベルのディレクトリは密接に関連しているため、これらについてまとめて説明する方が適切な場合があります。
まず、init.d の内容について説明します。このディレクトリには、いくつかのスクリプトが保存されます。これらのスクリプトは、通常、Linux が rpm パッケージでインストールされるときに設定されるいくつかのサービスの起動スクリプトです。システムには多数の rpm パッケージがインストールされており、その中には対応するスクリプトが多数あります。これらのスクリプトを実行すると、これらのサービスを開始、停止、再起動できます。
前述したように、/etc/rc.d/init.d ディレクトリ内のスクリプトは Windows のレジストリに似ており、システムの起動時に実行されます。プログラムはここで実行されます (init プロセスは実行レベルを読み取ります)。名前付けの観点から、/etc/rc.d/init.d でスクリプトを実行する時期が来たことは誰もが推測できると思いますが、そうでない場合は、なぜ実行されるのかもわかりません。 init(.d ) というものですね。そうです。システムはすべてのサービスを開始する必要がないため、 init.d 内のスクリプトを直接実行するのではなく、選択的に実行します。
では、システムはどの項目を開始し、どれを開始しないのかをどのように選択するのでしょうか? 現時点では、先ほど述べた実行レベルが機能します。システム起動の実行レベルを決定した後、スクリプト /etc/rc.d/rc が最初に実行されます。RH9やFC7のソースコードでは、check_runlevel()が出てくるとすぐにチェックを行っています(実装されているコードは違いますが、似ています) 実行レベルがわかった後、実行レベルごとにrc配下にサブディレクトリが存在します。 d それらは rc0.d、rc1.d...rc6.d です。各ディレクトリの下には、init.d ディレクトリの一部であるスクリプトへのリンクがいくつかあります。各レベルで実行されるサービスは、対応するディレクトリにあります。たとえば、レベル 5 で開始されるサービスはすべて rc5.d の下に配置されますが、この rc5.d の下に配置されるリンクはすべて init にリンクされます。 d 内のファイルは、実際に init.d に組み込まれるスクリプトです。

この時点では皆さんもっとはっきりしているのではないかと推測されますが、私も最初はこんな感じかと思いました。しかし、これらのリンク ファイルと実際に init.d で実行されるスクリプトのファイル名を注意深く読んで比較した後でも、理解できない疑問がいくつかありました。この記事を書くのを機に、下調べをして、ようやくその疑問が解決しました。
1. これらのリンク ファイルの前に Kxx または Sxx が付いているのはなぜですか?
そうです、K はサービスを停止 (Kill) することを意味し、S は開始 (Start)
2 を意味します。K と S の後ろの数字はどうなるのでしょうか? 何に使うのですか
? 最初に始めたときは、見栄えの良い配置や数を数えるために使うものだと思っていました。そうではないことが判明した。その機能は、これらのスクリプトの実行順序を決定するソートに使用され、値が小さいものが最初に実行され、値が大きいものが後で実行されます。多くの場合、これらの実行順序は非常に重要です。たとえば、Apache サービスを開始するには、最初にネットワーク インターフェイスを構成する必要があります。そうでない場合、IP のないマシンで http サービスを開始するのはばかげています。
3. 同じサービスの S と K のリンクが、init.d 以降の同じスクリプトであることにうっかり気づきました。なぜ同じスクリプトが実行されるのか疑問に思いました。
このとき、本当に素晴らしいSとKの使い方です。SとKは単に区別するために使われているだけではないことが分かりました。また、S と K は、それぞれ init.d の下のスクリプトに start パラメータと stop パラメータを渡しました。ああ、こんな感じ(悟りの表情、ふふ)!この時、何度も使った /etc/rc.d/init.d/network restart コマンドを思い出しました。S を渡すことは、コマンド /etc/rc.d/init.d/xxx start を実行することと同等であり、もちろん K は /etc/rc.d/init.d/xxx stop と同等であることがわかります。

4. /etc/init.d は /etc/rc.d/init.d へのソフトリンクです。

上記は他者が転載した再版乾物であり、出典は不明です。
しかし、これで長い間私の混乱が完全に解決され、サービスネットワークの再起動と /etc/rc.d/init.d/network の再起動の効果が同じであることがわかり、非常に明確になったと言えます。
ありがとう!!!

Tomcatなどの新しいサービスを追加して起動時に自動的に起動するように設定したい場合は、 /etc/rc 配下にTomcatサービスを追加すればよいのですが、service
network restartコマンドを使用する場合は、に権限を追加する必要があるようですchkconfig add. これは勉強する必要があります。
ここに画像の説明を挿入

元のリンク: https://blog.csdn.net/SONGW2018/article/details/81950146

おすすめ

転載: blog.csdn.net/craftsman2020/article/details/128178241