起動時の動作モードを指定する事によってサーバーの動作を変える事ができるランレベルについて解説していきます。基本的な事なので是非覚えておきましょう。
|
|
■ランレベルとは
Linux では、ランレベルと呼ばれる動作モードを指定する事によって、サーバーの動作を変える事が可能になります。ランレベルは、/sbin/init
プログラムによって制御され、カーネルによって起動されます。このプログラムがシステムがシャットダウンされるまでは動作しつづけます。ランレベルは以下表のように7つのレベルがあり、0
と 6 では、システムの停止/再起動時に実行するスクリプトを制御するために使用されます。通常、Linux
はランレベル3 もしくは、5 で起動されるようになっており、ランレベル3 は、テキストログインでLinux
が起動します。ランレベルを 5 に変更すると、X Window を使用したグラフィカルログインでシステムが起動されます。
0 |
システムの停止 |
1 |
シングルユーザーモード |
2 |
マルチユーザーモード(NFSなし) |
3 |
マルチユーザーモード(テキストログイン) |
4 |
未使用 |
5 |
マルチユーザーモード(グラフィカルログイン) |
6 |
システムの再起動 |
■現在のランレベルの確認
現在のランレベルを確認するには、runlevel コマンドを実行します。以下のように先頭に N が表示されている場合は、Linux
インストール時から一度もランレベルを変更していない事を表しています。
以下のように 3 5 と表示されている場合は、前回のランレベルが 3 で現在のランレベルが5 であることを表しています。
■ランレベルの変更 [ init ] [ telinit ]
ランレベルを変更するには、init もしくは、telinit コマンドを使用し、スーパーユーザーでなければ変更する事ができません。例えば、現在のランレベルを
3 から 5 に変更するには以下のように実行します。するとテキストログイン画面から、グラフィカルログイン画面に切り替わります。なお、シェルで
init コマンドを実行する場合は、その時だけのランレベルの変更で、永続的にランレベルを変更する場合には、後述する
/etc/inittab を編集する必要があります。
また、init 0 と指定した場合は、システムがシャットダウンします。shutdown コマンドと異なる点は、全てのログインユーザーに対して、メッセージを表示せずにシステムをシャットダウンすることです。
■/etc/inittab
init プロセスは、システムが起動して最初に開始されるプロセスで、このプロセスが行うべき処理が定義されているファイルが、/etc/inittab
です。/etc/inittab は以下のような書式で記述されています。
id:<runlevels>:<action>:<process>
|
ctrlaltdel |
Ctrl + Alt + Del キーが押されたときに実行する |
|
initdefault |
デフォルトのランレベルを指定する。プロセス項は無視される。 |
|
once |
指定したランレベルへの移行時に一度だけ実行する |
|
powerfail |
UPSが電源切断を検出したときに実行 |
|
respawn |
プロセスが終了した場合は常に再起動。通常は、getty(ログインプロンプトを出すプログラム)のために使用される。 |
|
sysinit |
システムの起動時に実行される。boot 及び bootwait
エントリよりも先に実行される。 |
|
wait |
指定したランレベルの移行時に1度だけ実行する。init はこのプロセスが終了するまで待機する。 |
|
boot |
システム起動中にのみ実行される。プロセス項で指定したプロセスが終了するのを待たずに残りの処理を行う。 |
|
bootwait |
システム起動中にのみ実行される。プロセス項で指定したプロセスが終了するのを待って残りの処理を行う。 |
|
ondemand |
telinit を使ってondemand ランレベルが指定された場合に、一度だけ実行される。 |
|
デフォルトのランレベルを変更するには initdefault の行を編集します。ここで編集したランレベルは、システムを再起動した後も、有効になります。
# vi /etc/inittab
id:3:initdefault:
# サーバー起動時に1度だけ実行される
si::sysinit:/etc/rc.d/rc.sysinit
# ランレベルごとに引数を変えて /etc/rc.d/rc を実行する
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# CTRL + ALT + DEL が押されたら1度だけ実行する
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
|
|
■デーモンの起動設定
まず、システムにインストールされているサーバーソフトウェア(デーモン)の動作状況を確認していきます。確認事項として、システム起動時にどのソフトウェアが起動し、どのソフトウェアが起動しないようになっているかということです。デーモンがシステムの起動時に起動するかどうかについては、/etc/rc.d/init.d
もしくは、/etc/init.d ディレクトリに格納されている制御スクリプトによって制御することになります。
通常、これらのスクリプトは、/etc/rc.d/rcX.d もしくは、/etc/rcX.d からシンボリックリンクされています。これらのディレクトリ内から制御スクリプト(/etc/rc.d/init.d
)にリンクを張ることによって、各種のプログラムがどのランレベル時に起動、もしくは停止するかを設定する事ができます。例えば、筆者の/etc/rc.d/rc3.d
ディレクトリ内を見てみると以下のようになっています。
# ls -l /etc/rc.d/rc3.d/
合計 0
lrwxrwxrwx 1 root root 15 2月 2 20:05 K03rhnsd
-> ../init.d/rhnsd
lrwxrwxrwx 1 root root 13 2月 2 20:03 K05atd
-> ../init.d/atd
lrwxrwxrwx 1 root root 14 2月 2 20:05 K10cups
-> ../init.d/cups
中略
rwxrwxrwx 1 root root 18 2月 3 04:32 S08iptables
-> ../init.d/iptables
lrwxrwxrwx 1 root root 14 2月 3 04:33 S09isdn
-> ../init.d/isdn
lrwxrwxrwx 1 root root 17 2月 3 04:31 S10network
-> ../init.d/network
lrwxrwxrwx 1 root root 16 2月 3 04:31 S12syslog
-> ../init.d/syslog
省略 |
|
ここで注目しておきたいのは、K10cups のように、K で始まるファイルと、S10network のようにS
で始まるファイルが存在する事です。Kで始まるファイルは、Kill を意味し、ランレベル3 においてcups
というプログラムは停止することを意味します。S で始まるファイル名は、Start を意味し、ランレベル3
においては、network は起動するということを意味します。また、S や K に続く数字はスクリプトファイルを実行する優先順位を表しており、数値の小さい順に実行されます。S10network
の場合は、ランレベル3 において、10番目に起動されるということになります。但し、注意したいのは、必ずしも10番目に起動するというわけではなく、この数値は優先順位を表すだけなので、S01
から S07 までのシンボリックリンクが存在しなければ、上記の例で S10 は3番目に実行される事になります。
それでは、ランレベル3 で停止させたい、もしくは起動させたいプログラムがある場合はどうするかというと、rm
コマンドでシンボリックリンク自体を削除するか、もしくは、シンボリックリンクの先頭のアルファベットをS から
K 、K から S へと変更してあげればいいだけです。あるいは、S や K の前にドット「.」などを付けてリネームしても構いません。
# cd /etc/rc.d/init.d
# mv S55sshd K55sshd |
|
また、ランレベル2 においてもプログラムを起動させたいというような場合は、シンボリックリンクをはっておきます。
# cd /etc/rc.d/init.d
# ln -s sshd ../rc2.d/S55sshd |
|
デーモンを起動させるには、以下のようにします。停止させるときはstop、再起動するときはrestart
とします。
# /etc/rc.d/init.d/sshd
start |
|