アットウィキロゴ

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

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

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

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

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

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

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

Systemd のディストリビューション

  • ステータスの確認 $ systemctl status サービス名
  • 自動起動の一覧  $ systemctl list-unit-files --type=service
  • サービスの起動  $ sudo systemctl start サービス名
  • 自動起動の有効化 $ sudo systemctl enable サービス名
  • 自動起動の無効化 $ sudo systemctl disable サービス名

OpenRC のディストリビューション(Gentoo、Devuanなど)

  • ステータスの確認 $ rc-status
  • 自動起動の一覧  $ sudo rc-update show
  • サービスの起動  $ sudo rc-service サービス名 start
  • 自動起動の追加  $ sudo rc-update add サービス名 ランレベル
  • 自動起動の削除  $ sudo rc-update del サービス名 ランレベル

AntiX、Devuan、Debian(SysVinit) など

  • update-rc.d
  • sysv-rc-conf

PCLinuxOS

ターゲットって何ですか? 昔のランレベルとの違いは

SysVinit では、システムの動作モードをランレベルで管理していました。この場合、システム全体に1つのランレベルが強制されます。Systemd では、あるサービスはあるターゲットの起動完了を必要とするというふうに、依存関係による管理に変えました。システム上にいろいろな動作モードを並ばせることができます。
RedHat 系のランレベル互換モードと、Systemd のターゲットとの対応関係は以下のようになります。

ランレベル表示 ターゲット 説明
runlevel0.target poweroff.target 停止
runlevel1.target rescue.target シングルユーザモード
runlevel2.target multi-user.target マルチユーザモード
runlevel3.target multi-user.target マルチユーザモード
runlevel4.target multi-user.target 未使用
runlevel5.target graphical.target マルチユーザモード(GUIログイン)
runlevel6.target reboot.target 再起動

SysVinit 時代の RedHat ではランレベル 2と3はネットワーク接続の無し/ありで区別されてましたが、Systemd の互換モードでは区別はありません。
Debian や Ubuntu では runlevel2.target 〜 runlevel5.target までが graphical.target です。

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

Systemd では、/etc/systemd/system の下に .service ファイルを作ります。

SysVinit では、ディストリビューションによって /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 というファイルが残っていませんか? 削除してから編集し直してみましょう。

最終更新:2026年06月22日 21:20