ウェブサイト検索

Linuxにおけるサービスとデーモンの理解


Linuxを始めたばかりのとき、頻繁に「サービス」や「デーモン」という用語に出会うことがあります。これらは、システムをスムーズに動作させる上で重要な役割を果たすバックグラウンドプロセスを指し、多くの場合、ユーザーが直接操作することを必要としません。

これらのコンポーネントがどのように機能するかを理解することで、システムの管理をより適切に行い、一般的な問題をより効率的にトラブルシューティングすることができます。この初心者向けの概要では、サービスとデーモンとは何か、それらがLinux内でどのように機能するか、そしてそれらを効果的に管理するためにどのようなツールが利用できるかを説明します。

Linuxにおけるサービスとデーモンとは何ですか?

それらが何であるか、どのように異なるのか、そしてなぜ重要なのかを分解してみましょう。

デーモンとは何ですか?

デーモン(発音:DEE-muhn)とは、自動的に起動するか、ユーザーの操作なしに静かにバックグラウンドで動作するバックグラウンドプロセスのことです。その仕事は、特定のシステムイベントを待つことや日常的なタスクを静かかつ継続的に処理することです。

デーモンを、監督を必要としない常時稼働の個人アシスタントのようなものだと考えてください。

こちらはいくつかの一般的な例です:

  • sshd – ネットワークを介したリモートSSHログインを処理します。
  • httpd – ウェブサーバーを実行し、ウェブサイトやAPIを提供します。
  • crond – スケジュールされたタスク(自動バックアップやメンテナンススクリプトなど)を管理します。

慣例として、Linux のほとんどのデーモンは d という文字で終わります。これは単に「daemon」を意味します。

サービスとは何ですか?

さて、デーモンが特にバックグラウンドプロセスを指すのに対し、「サービス」という用語は、Linuxではもう少し広い意味を持ちます。

サービスは、バックグラウンドで管理されるプロセスで、デーモンのように継続的に実行される場合もあれば、要求に応じて起動される場合もあります。サービスは、ネットワーキング、印刷、ログ記録、ファイアウォールなどの機能を提供します。

サービスは以下のことができます:

  • 起動時に自動的に開始する。
  • それはユーザーによって手動で開始または停止することができます。
  • 絶えず実行するか、必要な時だけ実行する。

というわけで、ここでの重要なポイントは次の通りです:

すべてのデーモンはサービスですが、すべてのサービスがデーモンであるわけではありません。

例えば:

  • sshd のようなデーモンは常に動作しており、接続を待ち受けています。
  • しかし、Bluetoothスキャナーのようなサービスは、Bluetoothデバイスが検出されたときにのみ動作する場合があり、これは常に動作しているのではなく、イベント駆動型です。

一部のサービスは一時的です。開始し、タスクを実行し、停止します:

  • systemd-resolved のように、DNS クエリをリアルタイムで処理します。
  • または atd、これは一度限りのスケジュールされたジョブを実行してから終了します。

この柔軟性こそが、Linuxを非常に強力なシステムにしている部分です。必要なときに必要なものだけを実行します。

Linuxがサービスを管理する方法: systemdとその他

現代のLinuxシステムでサービスを管理する際、systemdは支配的な存在であり、initシステムとして機能します。これはシステム起動時に最初に開始されるプロセスで、常にPID 1が割り当てられます。

一度動作を開始すると、systemd はシステム上の他のすべてのサービスやデーモンを起動および管理する役割を引き継ぎます。Ubuntu、Fedora、Debian、CentOS、および Arch Linux のような人気のある多くの Linux ディストリビューションは、その速度、効率性、および豊富な機能セットのために systemd をデフォルトの init システムとして採用しています。

あなたは主に systemd と対話するために systemctl コマンドを使用します。このコマンドを使うことで、サービスの起動、停止、有効化、無効化、ステータスの確認など、あらゆる操作を完全に制御することができます。

現在の標準はsystemdですが、特に古いまたは特殊なディストリビューションでは、他のinitシステムに出会うことがあるということに注意する価値があります。

  • SysVinit は、古いLinuxバージョンで使用されていた従来のinitシステムで、/etc/init.d のスクリプトを実行するという、よりシンプルなアプローチを用いていました。
  • UpstartはかつてUbuntuで使用され、イベント駆動型の機能でSysVinitを改善することを目的としていましたが、現在ではほとんど置き換えられています。
  • まだ使用されているもう一つのものは、OpenRCで、Alpine LinuxやGentooのようなディストリビューションで使用される軽量でシンプルな init システムです。

とはいえ、このガイドは完全に systemd に焦点を当てます。なぜなら、今日の実際の Linux 環境で最も出会う可能性が高いのがそれだからです。

systemctlでのサービス管理

systemctl コマンドは、systemd ベースの Linux システムでサービスとやり取りするための基本ツールです。ここでは、知っておくべき最も一般的なタスクを紹介します。

サービスの状態を確認するには、次のコマンドを使用します。このコマンドは、サービスがアクティブ、非アクティブ、失敗、または実行中のどの状態にあるかのスナップショットを提供します。

sudo systemctl status sshd

サービスを手動で開始するには、構文は簡単です:

sudo systemctl start sshd

サービスを停止するには、次のコマンドを実行してください:

sudo systemctl stop sshd

サービスを再起動するには、次のコマンドを実行してください:

sudo systemctl restart sshd

サービスを有効にして起動時に開始するには、次のコマンドを使用します:

sudo systemctl enable sshd

反対に、サービスの自動起動を無効にするには、次を実行します:

sudo systemctl disable sshd

現在アクティブなすべてのサービスの一覧を表示するには、次のコマンドを実行できます:

systemctl list-units --type=service

実行されていないがインストールされているサービスを含む、より広範なリストが必要な場合は、次を使用してください:

systemctl list-unit-files --type=service

ボーナス:ps、top、htopを使ってデーモンを表示する

systemctl のようなツールはサービス管理に便利ですが、時にはプロセスレベルで何が起こっているかを直接確認することが役立つ場合があります。これは、デーモンが実行中であることを確認したり、リソース使用状況をチェックしたり、パフォーマンスの問題をトラブルシューティングしたりする際に特に有用です。

まず、ps コマンドは実行中のすべてのプロセスのスナップショットを提供します。

ps aux

これは、実行中のすべてのプロセスの詳細なリストを表示します。リストには、プロセスが実行されているユーザー、使用しているCPUとメモリの量、そしてプロセスを開始したコマンドが含まれます。

特定のデーモンを探している場合、ps と grep を組み合わせて結果をフィルタリングすることができます。

ps aux | grep sshd

このコマンドは、SSHデーモンが実行中かどうか、そしてその現在の状態が何であるかをすばやく確認するのに役立ちます。

ravi       17554  0.0  0.0   9144  2176 pts/0    S+   10:56   0:00 grep --color=auto sshd

システムで何が起こっているかをリアルタイムで確認するには、ほとんどすべてのLinuxディストリビューションにデフォルトで含まれているtopを使用できます。

top

もしもっと使いやすく色彩豊かなものが欲しいなら、topのより高度な代替であるhtopを試してみてください。topとは異なり、htopでは矢印キーやファンクションキーを使ってプロセスを簡単にスクロール、フィルタ、並べ替えできます。

まずそれをインストールする必要があるかもしれません:

sudo apt install htop       # For Debian/Ubuntu
sudo yum install htop       # For CentOS/RHEL
sudo dnf install htop       # For Fedora

インストールしたら、htop を実行すると、内部で何が動作しているかをよりインタラクティブに確認することができます。

最終的な考え

サービスとデーモンは、SSH接続の管理、ジョブのスケジューリング、ウェブコンテンツの提供、システム時間の同期、ファイアウォールルールの適用などの重要なバックグラウンドタスクを処理するため、稼働中のLinuxシステムの中心です。

これらのコンポーネントは、システムを効率的かつ安定して動作させるために、裏で静かに動作します。それらがどのように機能し、どのように効果的に管理するかを理解することは、Linuxシステム管理に熟達するための重要な部分です。

一度 サービス と デーモン を効果的に管理する方法を理解すれば、Linux システムの操作や制御にずっと自信を持てるようになります。