Linuxのランレベルについての基本

ランレベルとは

ランレベルとはLinuxUnixで使われる言葉で、OSの動作状況を数値で表現したもの。
それらのOSが動作しているときは必ずひとつのランレベルに属している。
現在のランレベルは以下のコマンドで確認できる。

$sudo less /etc/inittab

たとえば私の使っているFedora Core11では以下のようになっています。

ランレベル 名称 備考
0 halt システムが停止をしている状態
1 Singlle user mode シングルユーザー、ネットワークログインなし、CUI
2 Multiuser, without NFS マルチーユーザー、ネットワークログインなし、CUI
3 Multiusr マルチーユーザー、ネットワークログインあり、CUI
4 -(unused) (未使用)
5 Multiuser(with GUI) マルチーユーザー、ネットワークログインあり、GUI
6 reboot 再起動中

だから通常に動作しているのであれば、たいてい5(もしくは3)が現在のランレベルということになります。

ランレベルの切り替え方

以下のコマンドでランレベルを切り替えることができる。

#runlevel  #現在のランレベルを確認
N 5        #現在のランレベルは5
#telinit 3 #ランレベルを3に変更
#runlevel  #現在のランレベルを確認
5 3        #現在のランレベルは3(その前には5だった)

ランレベルの基本的な利用法

それぞれのランレベルにはサービスを登録することができる。
ランレベルにサービスを登録すると、システムがそのランレベルになったときに登録されたサービスが自動的に起動されることになる。

サービスへの登録
  • サービスに追加する(起動時に開始させる)
#chkconfig | grep httpd #httpdのサービス登録状況を確認する
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off #オフになっている
#chkconfig httpd on
#chkconfig | grep httpd #httpdのサービス登録状況を確認する
httpd           0:off   1:off   2:on   3:on   4:on   5:on   6:off #オンになっている
  • サービスをoffにする場合は
#chkconfig httpd off

上記でchkconfigで対象のサービスがそもそも存在しない場合は

#chkconfig --add httpd

上記の操作でうまくいかない場合は、/etc/init.d/下にある対象のサービスのファイルのコメントアウトされている以下の部分に注目しよう。(/etc/init.d/httpdの例)

# chkconfig: 345 85 15
# description: The Apache HTTP Server is an efficient and extensible  \
#              server implementing the current HTTP standards.
(略)
### BEGIN INIT INFO
# Provides: httpd
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: distcache
# Short-Description: start and stop Apache HTTP Server
# Description: The Apache HTTP Server is an extensible server 
#  implementing the current HTTP standards.
### END INIT INFO

この辺りの設定方法はぐぐってください。(あるいは別途まとめなおすかも)

おまけ知識

ランレベルが切り替わると、/etc/rc.d/rc(#{ランレベル}).d/以下にあるスクリプトが実行される。
より正確にいうと/etc/rc.d/rc(#{ランレベル}).d/の下にあるKまたはSで始まるスクリプトが実行される。
KはKillの略で、SはStartの略。
ランレベルが切り替わったときにKから始まる名前のサービスが起動している場合はそれを停止させ(stop)、Sから始まる名前のサービスが起動していなければそれを開始させる(start)。
ちなみに/etc/rc.d/rc(#{ランレベル}).d/のファイルは全て/etc/init.d/下のファイルへのシンボリックリンクである。
要するにchkconfigなどのコマンドはこれらのリンクを追加したり削除するなどの操作をしてサービスの管理をしている。

ランレベルの応用的な利用法

また今度

間違っているところ、変なところがあったら教えてください。