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
で起動状態を把握し、不要なデーモンを無効化することでセキュリティ向上や軽量化も図れます。仕組みを理解しておくと、新しい常駐プログラムを安全に導入する際やトラブルシュートの際に大きな助けとなります。