デーモンの仕組み


デーモン・プロセス

他のプロセスにサービスするために、長時間バックグラウンドで 動作しているプロセスがデーモンです。

デーモン・プロセスの起動方法には大きくわけて2種類あります。

今回は、前者の 「OSが立ち上がった時に起動されて、それ以後動作し続けるデーモン」 について説明します。

OSの run level とデーモンの起動

OSのラン・レベル(run level、動作レベルのこと) には Linux では 0 から6まであります。 それぞれの run level でどのデーモンが起動されるか、 停止されるかが決められています。

RedHat系Linuxの場合

run levelconfiguration as default
0システム停止
1シングル・ユーザ・モード
2マルチユーザ設定(NFSなし)
3マルチユーザ設定(テキスト・ログイン)
4 --- (未使用)
5マルチユーザ設定(グラフィカル・ログイン)
6リブート

Debian系Linuxの場合

run levelconfiguration as default
0システム停止
1シングル・ユーザ・モード
2マルチユーザ設定
3ランレベル2と同じ
4ランレベル2と同じ
5ランレベル2と同じ
6リブート

ランレベルは /etc/inittab というファイルで定義されています。 Debian系ではランレベルの差がほとんどありませんが、これは、 Debian系Linuxでは「いらないソフトウェアはそもそもインストールしない」 →「インストールされたものは全て必要なもの」という方針なので、 ランレベルによる使い分けをしないようです。

RedHat系では デフォルト値はラン・レベル = 3 になっているはずです。 もしX-Windows Systemの設定でグラフィカル・ログインを 選んだ場合はデフォルトのラン・レベルの値は5になります。

Debian系ではデフォルトのランレベルは2になっています。それは/etc/inittab を見るとわかります。

/etc/inittab (Debian Linuxの場合)
..
# The default runlevel.
id:2:initdefault:
...

デーモンを起動したり停止したりするためのスクリプトが /etc/init.d/ の下に置かれています。 これらのスクリプトはstart, stop, restart といった コマンド引数を受け付けるように書かれています。

デーモンの自動起動

OSの run level に応じてデーモンは起動したり、停止したりします。 これらは /etc/rc?.d/ の下にある

というファイルで自動的に制御されています。 最初の文字('S' または 'K')で、「起動」と「停止」を表します。 NNは数字で優先順位を表し、数字が小さいほど先に実行されます。 NAMEは /etc/init.d/ に置いたスクリプト名です。 実は "/etc/rc?.d/[SK]番号NAME" は /etc/init.d/NAME へのシンボリック・リンクです。 'S' のときは start, 'K' のときは stop というコマンド引数で /etc/init.d/の下にスクリプトが実行されるわけです。

たとえば /etc/init.d/apache というスクリプトがあり、 これに対して /etc/rc1.d/K12apache や /etc/rc2.d/S90apache という名前のシンボリック・リンクが張られているわけです。

デーモンの管理

デーモンを新たにインストールするのは以下の手順になります。
  1. デーモンの実行ファイルをインストールする。
  2. /etc/init.d/の下に、デーモンを起動または停止するスクリプトを作る。 ただしそのスクリプトは start, stop, restart というコマンド引数を 受け付けるようにしておく必要があります。
  3. /etc/rc?.d/ の下から /etc/init.d/の下のスクリプトに シンボリック・リンクを張ります。 ただし、シンボリックの名前は S か K で始まり、その後に数字、そして スクリプト名が続きます。

update-rc.d

Debinaでは、デーモンの自動起動・停止を管理するためのソフトウエア update-rc.d が用意されています。

update-rc.d [-n][-f] サーバ名 remove
update-rc.d [-n] サーバ名 defaults [NN | NN-start NN-stop]
update-rc.d [-n] サーバ名 start|stop NN ランレベル ランレベル ...

オプション動作
defaults自動起動するように設定する。
remove自動起動の設定を削除する。
NNNNは順番を决めるための番号(小さい方が優先される)。
NN-start自動起動のためのSNNというシンボリックリンクを作成する。
NN-stop自動停止のためのKNNというシンボリックリンクを作成する。
-n何も行わなずに、実行するコマンドを表示する。
-f強制的にシンボリックリンクを削除する。

デーモン・プロセスのlog

デーモン・プロセスは入出力用の端末を持たないので、 一般に「動作状況の報告」を syslog プロセスを通して 記録します。 syslogプロセスの動作は /etc/syslog.conf で設定されます。

/etc/syslog.conf (RedHatの場合)
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none                          /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place.
mail.*                                                  /var/log/maillog
    (略)