LoginSignup
0
2

More than 5 years have passed since last update.

なぜ再起動した○○サーバーは〇〇サーバーのままでいられるのか

Posted at

前提

サーバー構築などやったことが初心者向け
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では並列処理をさせることも可能になっており、効率化が進んでいる。
言葉の定義やディレクトリの構造は違うが、やりたいことは同じであるようだ。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2