Tips記事
» 2002年12月11日 19時24分 UPDATE

デーモン制御スクリプトの実行順番を変えたい

[木田佳克,ITmedia]

 デーモンの起動スクリプトは、Linux How-To「第1回:起動スクリプトを知って基礎を理解しよう」でも紹介しているように、それぞれのデーモン(サーバソフト)をRPMパッケージでインストールすると、デーモン名のスクリプトが/etc/rc.d/init.d/下に用意される。

 このスクリプトが各ランレベルのディレクトリ下にシンボリックリンクされ、サーバの起動時に参照されることで自動実行する。これが細部の仕組みだ。詳細は、上記のHow-Toを参考にしてほしい。

 例えば、ランレベル3で起動されるデーモンを調べてみると、ディレクトリ下には次のようなシンボリックリンクが見られるだろう。ここで注目したいのは、Sに続く番号だ。この番号は、rc3.d/(ランレベル3)の起動条件(S)となるものの中から、小さい順にサーバ起動時に実行される。このため、デーモンの起動順番を変えたい場合には、この番号を変えればよいことになる。

# ls -l /etc/rc.d/rc3.d/
lrwxrwxrwx 1 root root 15 10月 6 06:44 S85httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root 13 10月 6 06:45 S91smb -> ../init.d/smb
lrwxrwxrwx 1 root root 15 2月 2 2002 S55named -> ../init.d/named

 通常、Red Hat Linuxなどでは、起動スクリプトの制御コマンドとして「chkconfig」が用意されている。

# chkconfig --level 35 dhcpd on

 上記は、ランレベル3と5でdhcpdデーモンを自動起動させるという意味だ。ここでは、特に起動番号が見られない。それではどこに設定されているのか? 各起動スクリプトの実体ファイルを覗いてみるとよい。

# less /etc/rc.d/init.d/httpd

#!/bin/bash
#
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15

〜以下略〜

# less /etc/rc.d/init.d/smb

#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the Samba smbd and nmbd daemons \

# less /etc/rc.d/init.d/bind

#!/bin/bash
#
# named This shell script takes care of starting and stopping
# named (BIND DNS server).
#
# chkconfig: - 55 45

 上記リストは、上から順にApache(httpd)、Samba(smb)、BIND(bind)それぞれの起動スクリプトの先頭から数行である。共通個所として「# chkconfig:.....」行が分かるだろう。この行が、前述した起動番号設定に値する個所であり、Apache(httpd)の例であれば標準で「85」番に割り当てられることを意味する。この番号を変更することで、「chkconfig」コマンドが参照するわけだ。

 以上の点から、番号を変えたい場合にはシンボリックリンクを張り直すのもよいが、上記の内容から起動スクリプト内を編集し、chkconfigコマンドを利用して番号を入れ替えるのが手軽かもしれない。

 また、chkconfigコマンドにて「--level 3456」などと指定せず、起動スクリプト内で次のように設定しておけば、「chkconfig httpd on」と指定するだけで「rc3.d/」〜「rc6.d/」ディレクトリ下に「S85...」のシンボリックリンクが作成される。

#!/bin/bash
#
# Startup script for the Apache Web Server
#
# chkconfig: 3456 85 15

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ