init システムの主な役割は、必須プロセスを起動および停止することです。Linux では、System V、Upstart、systemd という 3 つの主要な init 実装が登場しました。このレッスンでは、最も伝統的なバージョンであるSystem V init(SysVまたは単にsystemv(「システムファイブ」と発音)と呼ばれることが多い)に焦点を当てます。
システムがsystemv実装を使用しているかどうかを確認するには、/etc/inittabファイルを探します。このファイルが存在する場合、SysV ベースのディストリビューションを実行している可能性が最も高いです。
System V によるプロセスの管理方法
systemv initプロセスは、サービスを順次起動および停止します。たとえば、foo-bという名前のサービスがfoo-aに依存している場合、foo-aが完全に実行されるまでfoo-bは起動できません。initvシステムは、シェルスクリプトを使用してこれを実現します。これらのスクリプトは特定のディレクトリに配置され、サービスの起動と停止を処理します。カスタムスクリプトを作成することもできますが、ほとんどのシステムは、必須の OS サービスを管理するプリパッケージ化されたスクリプトに依存しています。
利点と欠点
この逐次アプローチの主な利点は、シンプルさと予測可能性です。foo-aが常にfoo-bより先に起動することがわかっているため、依存関係のトラブルシューティングが簡単です。しかし、init vモデルの大きな欠点はパフォーマンスであり、サービスは通常 1 つずつ起動されるため、最新の並列システムと比較して起動時間が遅くなります。
System V におけるランレベルの理解
systemv環境では、マシンの状態は 0 から 6 の番号が付けられたランレベルによって定義されます。これらのモードは Linux ディストリビューションによって若干異なる場合がありますが、一般的に次の標準的な規則に従います。
- 0: シャットダウン
- 1: シングルユーザーモード
- 2: ネットワークなしのマルチユーザーモード
- 3: ネットワークありのマルチユーザーモード
- 4: 未使用
- 5: ネットワークと GUI ありのマルチユーザーモード
- 6: 再起動
Init スクリプトとディレクトリ
システムが起動すると、設定されたランレベルを確認し、対応するスクリプトを実行します。これらのスクリプトは通常、/etc/rc.d/rc[runlevel].d/のようなディレクトリ内、または中央の/etc/init.dディレクトリ内にあります。S(Start)で始まるスクリプトは起動時に実行され、K(Kill)で始まるスクリプトはシャットダウン時に実行されます。SまたはKの後に続く数字が実行順序を決定します。
例:
pete@icebox:/etc/rc.d/rc0.d$ ls
K10updates K80openvpn
この例では、ランレベル 0(シャットダウン)に切り替えると、最初に updates サービスを停止するスクリプトが実行され、次に OpenVPN のスクリプトが実行されます。マシンのデフォルトのランレベルは/etc/inittabファイルで見つけることができ、そこで変更することもできます。
System Vは、ほとんどの最新の Linux ディストリビューションではsystemdに取って代わられていることに注意することが重要です。しかし、新しい init システムでは、systemv initスクリプトに依存するレガシーサービスをサポートするための互換レイヤーを提供することが多いため、ランレベルの概念に遭遇することがまだあります。