1.6. サービス制御スクリプト(/etc/rc)

/etc/rc.sysinit スクリプトにより Turbolinux 10 Server の初期化処理が完了すると、/sbin/init プログラムは、ランレベルを引数にして /etc/rc スクリプトを実行します。例えば、ランレベル 3 で Turbolinux 10 Server を起動したときは /etc/rc 3 が実行され、ランレベル 5 で起動したとき /etc/rc 5 が実行されます。この /etc/rc は、各ランレベルで開始するサービスを制御するためのスクリプトです。/etc/rc はその中で、/etc/rcn.d/ (n はランレベルの数字)に格納されているスクリプトを実行します。つまり、ランレベル 3 のときは、/etc/rc3.d/ ディレクトリにあるスクリプトが実行されることになります。ls -l コマンドで /etc/rc3.d/ ディレクトリを確認すると、以下のようなファイルが格納されています。

# ls -l
total 40
lrwxrwxrwx  1 root root 16 Sep 13 00:23 S02kparam -> ../init.d/kparam*
lrwxrwxrwx  1 root root 17 Sep 13 00:23 S10network -> ../init.d/network*
lrwxrwxrwx  1 root root 16 Sep 13 00:23 S20random -> ../init.d/random*
lrwxrwxrwx  1 root root 16 Sep 13 00:23 S30syslog -> ../init.d/syslog*
lrwxrwxrwx  1 root root 18 Sep 13 00:23 S35murasaki -> ../init.d/murasaki*
lrwxrwxrwx  1 root root 16 Sep 13 00:23 S50xinetd -> ../init.d/xinetd*
lrwxrwxrwx  1 root root 14 Sep 13 00:23 S55sshd -> ../init.d/sshd*
lrwxrwxrwx  1 root root 18 Sep 13 00:23 S75keytable -> ../init.d/keytable*
lrwxrwxrwx  1 root root 15 Sep 13 00:23 S90crond -> ../init.d/crond*
lrwxrwxrwx  1 root root 11 Sep 12 23:26 S99local -> ../rc.local*

出力結果を確認すると、これらのスクリプトは /etc/init.d/ ディレクトリにあるファイルへのシンボリックリンクになっていることが分かります。リンク先にあるこれらのファイルがサービスの開始や停止を制御するためのスクリプトです。/etc/init.d/ ディレクトリには、数多くの制御スクリプトが格納されています。

例えば、Web サーバー Apache の制御スクリプトは、/etc/init.d/httpd です。このスクリプトの引数に start を付けて実行すると Apache を起動することができます。

# /etc/init.d/httpd start

また、stop を指定すれば Apache は停止します。

# /etc/init.d/httpd stop

ここで、/etc/rcn.d/ ディレクトリ以下のファイル名を確認すると、K または S で始まり、続いて 2 桁の数字が付いていることが分かります。これらのファイル名は、以下の規則に従い名前が付けられています。

/etc/rc スクリプトは、/etc/rcn.d/ ディレクトリにあるこれらシンボリックリンクのファイル名を参照し、先頭に K が付いている場合には stop を引数に指定して実行します。これにより、対象のサービスは停止されます。次に、先頭に S が付いている場合には start を引数にして実行します。これにより、対象のサービスは開始されます。

このような仕組みで、/etc/rc スクリプトは各ランレベルで停止するサービス、開始するサービスを決定しています。したがって、各ランレベルで開始するサービスを設定するには、/etc/rcn.d/ ディレクトリにそのサービス制御スクリプトへのシンボリックリンクを作成しなければなりません。逆に、サービスを提供しないのであれば、シンボリックリンクを削除するか、シンボリックリンクを K から始まるファイル名にリネームする必要があります。この操作は、chkconfig コマンド、もしくはサービス設定ツール(turboservice)を使用すると簡単に実行することができます。chkconfig や turboservice の使い方については、第7章 で解説します。

1.6.1. Turbolinux 10 Server の起動時に独自の処理を実行する

/etc/rc.local は、システムにおいて特別な意味を持つスクリプトで、Turbolinux 10 Server の起動時に実行させたい独自の処理を記述しておくことができます。なお、/etc/rcn.d/ ディレクトリにあるファイルは、/etc/init.d/ 以下の制御スクリプトへのシンボリックリンクとなっていますが、/etc/rc3.d/ や /etc/rc5.d/ 以下にある S99local は、/etc/rc.local へのシンボリックリンクとなっています。

# ls -l /etc/rc3.d/S99local
lrwxrwxrwx  1 root root 11 Sep 12 23:26 /etc/rc3.d/S99local -> ../rc.local*