UNIXな生活
更新:2004/6/24  
Linuxな生活  FreeBSDな生活
 Solarisな生活
 JAVAな生活
 Practical use
 掲示版
起動処理(init)とランレベル(rc.d)の制御

Debianのinit処理
DebianはRedHat系Linuxとは起動時のRunLevelの振り方が異なります。
これは、/etc/inittabを見れば一目瞭然です。Debianでは、まず、/etc/rcS.d内を実行し、そこから指定されたデフォルトランレベルのrc*.dを実行します。
なお、RedHat系Linuxでは、以下のようなRunLevelの割当をしてあります。
init0 = 停止
init1 = シングルユーザーモード
init2 = NFSを使用しないテキストログインモード(マルチユーザーモード)
init3 = テキストログインモード(マルチユーザーモード)
init4 = 未使用
init5 = GUIログインモード(マルチユーザーモード)
init6 = 再起動

Debianでは、
init0 = 停止
init1 = シングルユーザーモード
init2 = マルチユーザーモード
init3 = init2に同じ
init4 = init2に同じ
init5 = init2に同じ
init6 = 再起動

Debianでは、テキストログインやGUIログイン等はわかれていません。
これは、Debianのポリシーに関係してきます。
Debianでは、インストールされている物は使うもの(起動するもの)というポリシーな様です。
たとえば、GDMなどをインストールすれば、自然のGUIログインになります。
ちなみに、アプリをインストールするとデフォルトで起動するようになっています。
不必要なサーバアプリ等はインストールしないように注意しましょう。

rc.d の制御
rc.dは、OSの起動処理(init)内から呼ばれ、起動時のサービスを制御する働きをします。
具体的には、/etc/init.d内の起動スクリプトのシンボリックリンクが各ランレベル内に作成されています。
OS起動時は、/etc/inittab内から使用するランレベルに合わせてrc.d内の起動スクリプトを実行します。
例えば、init0=停止の場合は、rc0.d内のスクリプトが実行されます。
rc.d内のスクリプトは、先頭が"S"で始まる物が起動、"K"で始まる物が停止で、"S"や"K"の後に続く数字順に実行されます。
Linuxで起動時のサービス制御をする場合は、該当するrc.d内のスクリプトを編集していきます。
なお、Debianでは、起動時のデフォルトランレベルは、rc2.dです。

rc.d内のリンクを直接リネームしてもいいですが、Debianには"update-rc.d"というコマンドが用意されています。
これを使うと、楽に編集することができます。

例えば、不必要なサービスがある場合は、以下のような手順で行うといいでしょう。
例)inetdを停止する場合。
#update-rc.d -f inetd remove----全てのRunLevelからinetdのリンクを削除します。
これで、inetdは起動しなくなりますが、もしinetdをupdateした場合、またリンクが作成されてしまします。
これを防ぐために、使用していないRunLevelに停止用のリンクを作成しておくといいでしょう。
#update-rc.d inetd stop 20 5 .

次に、PostgreSQLを起動できるようにしてみます。
まず、/etc/init.d/に"postgres"という起動スクリプトを準備します。
続けて、以下のコマンドでrc.d内に起動スクリプトを作成します。
#update-rc.d postgres defaults 90
これで、各RunLevelにK90postgresやS90postgresが作成されます。

ただ、rc0.dとrc1.d、rc6.dはK90では都合が悪い(Postgresは、もっと早く停止したい)ので、もう少し細かく設定します。
#update-rc.d postgres start 90 2 3 4 5 . stop 10 0 1 6 .
これで以下のようなリンクファイルが作成されます。
/etc/rc0.d/K10postgres
/etc/rc1.d/K10postgres
/etc/rc2.d/S90postgres
/etc/rc3.d/S90postgres
/etc/rc4.d/S90postgres
/etc/rc5.d/S90postgres
/etc/rc6.d/K10postgres


Producted by Tomoya Sakurai