Linux を学習するうえで必ず登場するキーワードが「デーモン(daemon)」です。デーモンとは、ユーザーがログインしていなくてもバックグラウンドで常時動作し、ネットワーク待受やログ収集などを自動的に処理するサービス用プロセスの総称を指します。
語源と由来
「daemon」という単語はギリシャ神話の守護霊に由来しており、人目につかずに働く存在をイメージした名前です。プロセス名の末尾に付く 「d」 は “daemon” の頭文字を意味しています(例:sshd、crond)。
OS における役割
- ネットワーク接続の待受 (
sshd,nginx) - システムログの収集 (
rsyslogd) - 印刷キューの管理 (
cupsd) - タスクスケジューラ (
crond)
これらはシステム起動と同時に立ち上がり、利用者が明示的に操作しなくても安定したサービスを提供します。
デーモンの具体例
ネットワーク系デーモン
| デーモン名 | 主な機能 | 待受ポート |
|---|---|---|
| sshd | SSH 接続の受付 | 22/TCP |
| httpd | Web サーバー(Apache) | 80, 443/TCP |
| named | DNS サーバー(BIND) | 53/UDP, 53/TCP |
システム管理系デーモン
| デーモン名 | 主な機能 |
|---|---|
| rsyslogd | 各種ログの一元管理 |
| crond | 定期タスクの実行 |
| systemd-journald | systemd ログの収集 |
デーモンの起動と管理(systemd)
現行ディストリビューションの多くは systemd を採用しており、systemctl コマンドによってデーモンの状態を一元管理できます。
systemctl 基本コマンド
# 状態確認
sudo systemctl status sshd
# 起動・停止
sudo systemctl start sshd
sudo systemctl stop sshd
# 再読み込み(設定変更後)
sudo systemctl reload sshd
自動起動設定
# 次回ブート時から自動起動
sudo systemctl enable sshd
# 自動起動を解除
sudo systemctl disable sshd
enable と disable はサービスのシンボリックリンクを作成・削除する形で有効化・無効化を行います。
デーモンの内部構造
フォークとセッション分離
デーモンは以下の手順で端末から切り離されます。
fork()で子プロセス生成- 親プロセス終了(子のみ存続)
setsid()で新しいセッションを開始- 作業ディレクトリを
/に変更 - 標準入出力を
/dev/nullにリダイレクト
ファイルディスクリプタ整理
不要なファイルディスクリプタを閉じ、ログは専用ファイルや syslog に出力することで安定性とセキュリティを確保します。
よくある質問とトラブルシューティング
サービスとデーモンの違い
Linux ではほぼ同義語として扱われます。Windows 用語の「サービス」に相当するのが Linux における「デーモン」です。
デーモンがすぐ停止する場合の確認ポイント
sudo journalctl -u <サービス名> -xeでエラーログを確認します。- 設定ファイル(例:
/etc/ssh/sshd_config)の文法エラーをsshd -tのように事前検証します。 - ポート競合や権限不足がないかを
netstatやssで調査します。
まとめ
デーモンは Linux の安定動作を支える裏方プロセスであり、systemd の導入によって管理が直感的になりました。systemctl で起動状態を把握し、不要なデーモンを無効化することでセキュリティ向上や軽量化も図れます。仕組みを理解しておくと、新しい常駐プログラムを安全に導入する際やトラブルシュートの際に大きな助けとなります。
