Linuxを使い始めた人,資格試験合格を目指す人を対象に,模擬試験形式でLinuxの基礎を解説します。

問題:次の説明文のA~Bに,適切な語句を入れなさい。

メール・サーバーやWebサーバーなど,各種サービスの起動スクリプトは( A )ディレクトリにあり,システム起動時に実行される。ラン・レベル3の起動スクリプトは( B )ディレクトリにある。通常( B )にあるスクリプトは,( A )にあるスクリプトへのシンボリック・リンクになっている。

ポイント:各サービスを起動するスクリプトは,/etc/init.dディレクトリに格納されています。システム起動時やラン・レベルが変更されるときは,/etc/rc?.d(?はラン・レベル名)ディレクトリの中にあるスクリプトが実行されます。このスクリプトは,/etc/init.d内にあるスクリプトへのシンボリック・リンクになっています。

キーワード:/etc/init.d,/etc/rc?.d,chkconfig

 自動的に起動・停止するサービスは,通常「/etc/rc.d/rc」という名前のスクリプトで起動します。図3は,Fedora Core 5のrcスクリプトの主な部分です(先頭の数値は行番号です)。

図3●/etc/rc.d/rcの内容の抜粋
図3●/etc/rc.d/rcの内容の抜粋
Fedora Core 5の場合。左の数字は行番号。
[画像のクリックで拡大表示]

 27~29行目は,現在のラン・レベルを「runlevel」という変数として格納しています。49行目からのfor文によって,/etc/rc?.dディレクトリ(?は,現在のラン・レベル名が入る)の中にあるKで始まるファイル名のサービスが停止するようになっています。

 66行目からはfor文によって,Sで始まるファイル名のサービスが起動します。/etc/rc?.dディレクトリ内にあるKもしくはSから始まる名前のファイルは,/etc/init.dディレクトリにあるスクリプトへのシンボリック・リンクになっています。

サービスの起動

 HTTPサービスを起動する場合,/etc/init.dディレクトリにあるスクリプトを利用し,startパラメータ(引数)を付けて次のように実行します。

# /etc/init.d/httpd start

 これらのスクリプトのパラメータは一般に,停止であれば「stop」,再起動であれば「restart」,状態の確認は「status」です。パラメータが分からない場合は,パラメータを省略して実行してみましょう。次のように,説明が表示される場合があります。

# /etc/init.d/httpd
使い方: httpd {start|stop……(後略)

 なお,Fedora Coreなどでは,/etc/init.dディレクトリにあるスクリプトのほかに,/sbin/serviceスクリプトでもサービスの起動・停止ができます。

# service サービス名 start

ラン・レベルの設定

 スクリプトを使ってサービスの起動や停止を行っても,システムを再起動すれば元に戻ってしまいます。各ラン・レベルで起動・停止するサービスは,前述した/etc/rc.d/rcスクリプトに指定されているように,/etc/rc?.dディレクトリにあるファイルで決まります。各ランEレベルで起動・停止になるサービス名は,次のコマンドで確認できます(例は「3」の場合)。

# ls /etc/rc3.d

 表示されたスクリプト・ファイルの名前が,Kから始まるサービスが停止し,Sから始まるサービスが起動します。下記のようにファイル名を変更すれば,停止していたサービスが起動するようになります。

# mv /etc/rc3.d/K15httpd /etc/rc3.d/S85httpd

 インストールされているサービスが,ラン・レベルごとに起動・停止のどちらかになるかは,chkconfigコマンドで確認できます。

# chkconfig --list

 chkconfigコマンドでパラメータを付ければ,各ラン・レベルごとの設定変更も可能です(図4)。

図4●chkconfigコマンドの使用例
図4●chkconfigコマンドの使用例
[画像のクリックで拡大表示]

 (1)最初の「# ls /etc/rc?.d/*httpd」で,各ラン・レベルごとのディレクトリから,HTTPサービスに関する設定を確認しています。すべてファイル名が「K」から始まるスクリプトになっていますので,サービスは停止されます。

 (2)は,chkconfigコマンドを使ってHTTPサービスの設定を確認しているところです。オプションに,デーモン名である「httpd」を指定します。

 (3)のように,chkconfigコマンドを使って,ラン・レベル名を指定せずに設定を指定すると,「2」「3」「4」「5」を対象に変更されます。

 (4)で確認すると,「0」「1」「6」を除いて,サービスの起動を表す「S」から始まるファイル名になっていることが分かります。

 レベルを指定する場合は,(5)のようにオプションで「--level」を指定し,その後にレベル名を付けます。

 (6)すべての設定を初期設定(デフォルト)に戻す場合は,オプションに「reset」を指定します。

起動・停止の優先順位

 HTTPサービスの起動スクリプトに対し,「chkconfig」を含む行を検索すると

# grep chkconfig /etc/init.d/httpd
# chkconfig: - 85 15

という結果を得られます。この行はデフォルトの設定を表し,「-」は停止,それ以外は起動を示します。2桁の数字は,スクリプトの起動・停止の優先順位を表し,この場合,HTTPサービスの起動は85番目,停止は15番目の優先順位で行うことです。

 networkサービスの場合は,

# grep chkconfig /etc/init.d/network
# chkconfig: 2345 10 90

という結果になります。これは,ランEレベル「2」「3」「4」「5」のすべてで起動することを表し,優先順位は10番目であることが分かります。停止する場合は,90番目です。

類題

Q1 ラン・レベル3で自動的に起動・停止するサービスは,どのディレクトリ内のファイルを確認すればよいか?

【問題と類題の解答は次ページ】