前回までの記事でsystemdを使用したサービスの管理方法について見てきましたが、その延長で「デーモン」と「サービス」の関連について見ていきます。
ps axとコマンドを実行すると、マシンで動作している全プロセスが表示されます。
# ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /usr/lib/systemd/systemd --switched-root --system -- 2 ? S 0:00 [kthreadd] ~ 省略 ~ 1375 ? Ss 0:00 /usr/sbin/sshd -D 1376 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/tuned -l -P 1636 ? S 0:00 /usr/pgsql-9.5/bin/postgres -D /var/lib/pgsql/9.5/da 1925 ? Ss 0:00 postgres: logger process 2509 ? Ss 0:00 /usr/libexec/postfix/master -w 2512 ? S 0:00 qmgr -l -t unix -u 2524 ? Ss 0:00 postgres: checkpointer process 2525 ? Ss 0:00 postgres: writer process 2526 ? Ss 0:00 postgres: wal writer process 2527 ? Ss 0:00 postgres: autovacuum launcher process 2528 ? Ss 0:00 postgres: stats collector process
すると、TTYの欄が「?」になっているプロセスがたくさん並んでいることがわかります。
これは制御端末のないプロセスであることを示しています。このような、制御端末を持たないプロセスのことをデーモンプロセス(deamon process)、あるいは単にデーモン(deamon)と言います。
では、なぜデーモンのような存在が必要となるのでしょうか。それは、端的に言うと、サーバーを作るためです。
サーバーは、利用者(クライアント)に何かのサービスを提供するプロセスのことです。普通はネットワーク経由で利用します。
サーバーも誰かが起動しなければなりません。ですが、サーバーはコンピュータが動いている間はずっと起動しておくものです。プロセスを起動した人がログアウトするとその端末が制御端末になっているプロセスは止められてしまいますから、サーバープロセスを起動した人はログアウトできないことになってしまいます。これでは不便です。
そこでデーモンが必要になってくるのです。どの端末ともまったく関係なく動作することができれば、サーバーを起動した人は気兼ねなくログアウトできますし、うっかり「Ctrl+C」でサーバーを止めてしまうこともありません。
Webサーバーとして動作させるためのApache HTTP ServerやDMBSのPosgreSQL、メールサーバーのPostfix等はすべてデーモンプロセスとして動作しています。
このデーモンが提供する機能のことを「サービス」と言います。
Linuxでサーバー機能として提供されるもののほとんどが、このサービスという形で用意されています。つまり、Linuxで何かしたいと思ったならば、希望にあったサービスを提供するデーモンを追加すればいいわけです。