conf t

インフラエンジニアのメモ

chkconfig ランレベルについて

ランレベルについて

サーバを再起動したらログがダウンロードできない。。。
FTPサーバに自動起動を設定していなかったのが原因。
サーバ起動時に自動で立ち上げるにはchkconfigでランレベルの設定が必要ですと。

自動起動設定するのにchkconfigでランレベルの設定は何回かやってるが、
いったいランレベルがどういうものなのか理解していないので調べた。

現在のランレベルの調べ方
runlevelコマンドで現在のランレベルを表示する

$ runlevel
$ N3

現在のランレベルは3でデフォルトの状態。

ランレベルは以下7つあるらしい

ランレベルの種類
ランレベル 0 : システムの停止
ランレベル 1 : シングルユーザモード
ランレベル 2 : マルチユーザモード (NFSマウントなし)
ランレベル 3 : マルチユーザモード (通常 : コンソールログイン)
ランレベル 4 : 未使用
ランレベル 5 : マルチユーザモード (通常 : ディスプレイマネージャ使用)
*ランレベル 6 : システムの再起動

3が通常状態なのはわかったけど、他がどういう状態なのかわからない

telinitコマンドでランレベルを変更できるらしい 例えばtelinit 3でシステム停止、telinit 6で再起動ができるらしい ということは、0と6は文字通り停止、再起動時の状態を示しているのか

あとの1~5の違いがいまいちわからない

ランレベル1 シングルユーザモード
Windowsのセーフモード的なもので、文字通り1人(root)しかログインできない。
メンテナンスなどをする際に使う。

ランレベル2
ランレベル3とほぼ同じ。NFSのサービスが起動してないらしい。
何か有るのかな?使いどころがわからない。

ランレベル3
デフォルトのモード。通常はこのモード。

ランレベル5 グラフィカルログイン
GUIで起動するモードらしい。
業務で使うことあるのかな?多分使わないと思う。
個人でなら使うことあるかもしれないけど。

デフォルトのランレベルの設定は、/etc/inittabに記述されている

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

0と6は(Do NOT set initdefault to this)と書いてあり、
ランレベル0と6はデフォルトにはしてはいけない。
多分停止と再起動の状態だからですね。

ということで0と6は使わない、1はメンテナンス用
なので、通常時は2~5の状態のいずれかだと言えるのか

なるほど、ランレベルとは現在のサーバの状態だとわかった。
しかし、FPTやapacheとかの各種サービスの自動起動するためにランレベルの設定?ってのがよくわからない。

どうやらlinuxではランレベルによって起動するサービスが決まっている。
/etc/init.d/
配下にrc0.d~rc6.dとランレベル毎のディレクトリがある

$ ls /etc/rc.d
init.d  rc  rc.local  rc.sysinit  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d

ランレベルディレクトリ配下にそのランレベル用の起動用シェルがある。

chkconfig postfix on
を実行すると、httpdの2,3,4,5がonになる
つまり、/etc/init.d/rc2.d~rc5.dに起動用シェルが作られる。
0、6は停止と再起動、1はメンテナンス用だから、すべての状態で起動と同義なわけですね。

chkconfig --list postfix
postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off

find /etc/rc.d/rc*.d | grep postfix
/etc/rc.d/rc0.d/K30postfix
/etc/rc.d/rc1.d/K30postfix
/etc/rc.d/rc2.d/S80postfix
/etc/rc.d/rc3.d/S80postfix
/etc/rc.d/rc4.d/S80postfix
/etc/rc.d/rc5.d/S80postfix
/etc/rc.d/rc6.d/K30postfix

あれ、rc0.d~rc6.d全部のディレクトリにシェルが入ってる?
2,3,4,5だけにしか入っていないと思ったのに
調べると、頭文字Sで始まるものはStartする起動用、Kで始まるのはkillするスクリプト

ところで停止時や再起動時にonになるサービスってそもそもあるのだろうか?
chkconfig --listで確認したかぎりでは0と6はすべてoffだった。
/etc/rc.d/rc0.dを見てみると

$ ls /etc/rc.d/rc0.d/S*
/etc/rc.d/rc0.d/S00killall  /etc/rc.d/rc0.d/S01halt

haltとkillallを実行する様子