前提
サーバー構築などやったことが初心者向け
UNIX系OSに明るくない初心者向け
疑問
とある〇〇サーバーが再起動された。再起動されるとその〇〇サーバーとして働いているデーモンプロセスは途切れてしまいそうである。
しかし、〇〇サーバーは再起動後も〇〇サーバーであり続けることができる。
これはなぜだろうか?
そもそもOSが起動するまで
そもそもどのようにOSは起動するのか。下記のような流れで起動しているらしい。
1. 電源が入る
2. BIOS(Basic Input Output System)というハードウェアを管理するプログラムが動く(このプログラムはもちろんROM上にある)
3. 管理されているハードウェアのうち、ブートデバイスに決められている場所から、ブートローダーというものが起動する(UNIX系OSではGRUBという)
4. GRUBからLinuxカーネルが読み込まれる
5. initプロセスというプロセス界のアダムが起動する
この5番に秘密があった。
OSの動作モード
また、OSには電源の状態がONとOFFの二種類ではなく、ランレベルと呼ばれる動作モードが存在する。
以下はランレベルとその状態の一例。OSによって微妙に異なる。
0. システムの停止
1. シングルユーザーモード
2. 未使用
3. マルチユーザーモード(コンソールログイン)
4. 未使用
5. マルチユーザーモード(グラフィカルログイン)
6. システムの再起動
起動スクリプト
このランレベルごとに/etc/rc.d/rcX.dディレクトリが存在する。(Xに0から6までのランレベル)
ディレクトリの配下にはK(Kill)から始まるスクリプトとS(Start)から始まるスクリプトがあり、起動時にはS始まりのスクリプトがファイル名に書かれている数字の順番に実行されていくことになる。
この中にあるスクリプトの一つが、〇〇サーバーとして働いているデーモンプロセスを起動させるスクリプトのはずである。
これらはシンボリックリンクであり、その実態は/etc/rc.d/init.dディレクトリに存在している。
このような設定によりOSが起動すると同時にデーモンも起動することが可能となっている。
なおランレベルのデフォルトは/etc/inittabで設定されている。
また、serviceコマンドで/etc/rc.d/init.dディレクトリにあるスクリプトを使うことにより、手動でデーモンプロセスの起動や停止を行うこともできる。
余談
initはもう古い。今ではsystemdという仕組みを使うらしい。
initでは起動プロセスを順番にひとつずつ起動していく必要があるが、systemdでは並列処理をさせることも可能になっており、効率化が進んでいる。
言葉の定義やディレクトリの構造は違うが、やりたいことは同じであるようだ。