他のプロセスにサービスするために、長時間バックグラウンドで 動作しているプロセスがデーモンです。
デーモン・プロセスの起動方法には大きくわけて2種類あります。
今回は、前者の 「OSが立ち上がった時に起動されて、それ以後動作し続けるデーモン」 について説明します。
OSのラン・レベル(run level、動作レベルのこと) には Linux では 0 から6まであります。 それぞれの run level でどのデーモンが起動されるか、 停止されるかが決められています。
run level | configuration as default |
---|---|
0 | システム停止 |
1 | シングル・ユーザ・モード |
2 | マルチユーザ設定(NFSなし) |
3 | マルチユーザ設定(テキスト・ログイン) |
4 | --- (未使用) |
5 | マルチユーザ設定(グラフィカル・ログイン) |
6 | リブート |
run level | configuration 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/ の下にある
たとえば /etc/init.d/apache というスクリプトがあり、 これに対して /etc/rc1.d/K12apache や /etc/rc2.d/S90apache という名前のシンボリック・リンクが張られているわけです。
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 | 自動起動の設定を削除する。 |
NN | NNは順番を决めるための番号(小さい方が優先される)。 |
NN-start | 自動起動のためのSNNというシンボリックリンクを作成する。 |
NN-stop | 自動停止のためのKNNというシンボリックリンクを作成する。 |
-n | 何も行わなずに、実行するコマンドを表示する。 |
-f | 強制的にシンボリックリンクを削除する。 |
デーモン・プロセスは入出力用の端末を持たないので、 一般に「動作状況の報告」を 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 (略)