サーバー/デーモン全般に関するFAQ

デーモン (daemon) ってなんですか?

PC の起動から常に実行状態でシステムに待機 (常駐) し、自動で定期的に処理を実行したり、サーバーとしてクライアントの要求に対してサービスを提供するためのプログラムの事です。

システムに必要のない余計なデーモンが起動していると

  • CPUやメモリなどの資源を過度に消費する。
  • デーモンにセキュリティホールが存在するとシステムを踏み台にされる危険がある。

といったことがあるのでシステムに必要がないデーモンの起動は止めておきましょう。

デーモンの起動設定をしたい。

デーモンの起動スクリプトは通常/etc/rc.dにありますが、特に理由がなければディストリビューション付属のツールを使って設定しましょう。

デーモンの起動設定は次のツールで行うことができます。

  • 操作が簡単な redhat-config-services, rcconf コマンドがおすすめです

Red Hat 系

Debian 系

Gentoo

ランレベルって何ですか?普段使うランレベルを変更したい

OS の起動・終了時に実行する処理を段階ごとに分類する仕組み。

SysV系UNIX互換のディストリビューション (Red Hat/Slackware系) での標準的なランレベルの設定は以下のとおり:

ランレベル 説明
0 停止
1 シングルユーザモード
2 マルチユーザモード(ネットワークなし)
3 マルチユーザモード(ネットワークあり)
4 未使用
5 マルチユーザモード(GUIログイン)
6 再起動

Red Hat系では /usr/sbin/chkconfig --list と実行すれば設定が表示される。*1

ランレベルの配置は /etc/rc.d で決まっていて、起動・終了時に init/etc/inittab の設定をみて実行します。

なので、普段使うランレベルを変更したい時は /etc/inittab を編集しましょう。

起動スクリプトの配置はどうなってるの?

ディストリビューションによって /etc 直下にあったり /etc/rc.d にあったりという違いはあるものの、大まかに言えば

  1. /etc/rc.d/init.d にシステムデーモン/サービスを起動・終了させるための実行スクリプトがある
  2. /etc/rc.d/rc[数字].d に各ランレベルごとに実行スクリプトへのリンク(Sで始まる名前は起動、Kは停止)

たとえば Apache を起動させたければ

/etc/rc.d/init.d/apache start

とか。stop と restart で停止/再起動。

夜中にハードディスクが不気味なうなりを上げます。怖くて使えません。(updatedb)

夜中に勝手にハードディスクがガリガリガリガリ。うぉ、まさかクラッカーに乗っ取られたのか!?

大抵の場合、夜中に cron デーモン (特定の処理を定期的に実行するデーモン) によって locate コマンドのためのデータベースを更新する作業 (updatedb) が行われています。

停止するには root の crontab を編集して cron の設定を変更します。ただし、その時点から locate コマンドが新しいファイルを探せなくなってしまうので、locate を使う場合は手動で updatedb を実行しましょう。

crontab -e で編集した内容が反映されない。

/var/spool/cron/crontabs に ユーザ名.new というファイルが残っていませんか? 削除してから編集し直してみましょう。

inetd

inetdはスーパーサーバと呼ばれるソフトウェア。

デーモンは通常、それぞれ起動してポートへの接続を待機するが、あまり使われないデーモンだと、ポートの数だけ待機するのに無駄がある。

そのため、デーモンとして常にひとつだけ起動しておいて、ポートへの接続が来た段階で担当のデーモンを起動するスーパーサーバと呼ばれるデーモンが作られた。

ただし、httpdのようにたくさんのリクエストが来るデーモンの場合、inetdで管理するのは必ずしも適切ではない。あくまで、あまり使われないが常駐する必要のある雑多なデーモンのための仕組み。

Mandriva Linux

起動時の各種サービスを 追加 / 停止 するには?

この設定変更は、Mandriva コントロールセンターより行えます。具体的には、デスクトップのパネルメニューより [アプリケーション] > [システム] . [コンピューターを設定] > [システムサービス] より、任意のサービスを選択して変更ができます。

サーバーとして活用する方法など。

Mandriva Linux 10.1 Memo というサイトでは、サーバーの運用に関連した実用的な情報が公開されているので大変参考になるでしょう。

systemd

systemdって何?

最近、マルチコアのCPUが普通になったため、並列処理のできないsysv initは時代遅れになった。

代わりに最近使われるのがsystemd。

systemdではシェルスクリプトではなくUnitと呼ばれる設定ファイルを記述し、並列処理ができるところではできる限り並列処理を行う。

なんだか、単なる並列のinitシステムではなく、新しいLinuxの管理ツールのデファクトスタンダードになりつつある。

それもそのはず、Linuxの開発者たちは「無意味なLinuxディストリビューション間の差異をなくす」ために、systemdを位置付けて開発している。

だが、複雑怪奇なsystemdは賛否両論を生んでおり、systemdを排除したDevuanのようなディストリビューションも開発されている。

systemdのコマンド

たとえば、

systemctl start httpd.service

とすれば、httpdのサービスが起動する。

startのほか、restart(再起動), stop(停止), reload(設定の再読み込み), status(情報表示), show(情報表示2)などがある。また、enable, disableで自動起動を有効化・無効化できるほか、is-enabledで有効・無効の確認ができる。

systemdの仕組み

システム標準のUnitファイルは/usr/lib/systemd/system/にあり、管理者による設定は/etc/systemd/system/にUnitファイルを置いて行う。

Unitファイルは、前後関係と依存関係によって成り立つ。前後関係があるUnitについてはその順序を守り、前後関係のないUnitについてはすべて並列で起動する。

また、udevのデフォルトの設定(ルール)は/usr/lib/udev/rules.dに、管理者によるルールは/etc/udev/rules.dにある。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2021年09月07日 17:37

*1 Debian や Gentoo などではランレベルの配置が若干異なります。