Linuxのsystemdとは?初心者でもわかるサービスの仕組みと管理の基本
生徒
「Linuxの勉強を始めたのですが、よく『サービスを起動する』とか『systemd』という言葉を聞きます。これって何のことですか?」
先生
「systemdは、LinuxというOSが動き出した後に、裏側で動く色々なプログラムを管理する『総責任者』のような存在ですよ。」
生徒
「総責任者ですか。なんだか凄そうですね。パソコン初心者でも触る必要があるものなんですか?」
先生
「はい、サーバーを作ったりアプリを動かしたりするときには必ず使う知識です。難しい仕組みですが、身近な例えを使ってゆっくり解説していきますね。」
1. systemd(システムディー)とは何か?
Linuxの世界において、systemd(システムディー)はシステム全体を管理するための仕組みです。私たちが普段使っているパソコンやスマートフォンも、電源を入れると自動的にインターネットに繋がったり、画面を表示したりしますよね。これらは裏側で小さなプログラムがたくさん動いているおかげです。
Linuxでは、こうした裏方で動くプログラムのことを「デーモン(Daemon)」や「サービス(Service)」と呼びます。systemdは、これらのサービスを「いつ起動するか」「どの順番で動かすか」「もし止まってしまったらどうするか」といったスケジュールや健康状態をすべて管理している、まさに「OSの司令塔」なのです。
昔のLinuxでは別の仕組みが使われていましたが、現在はUbuntuやCentOS、Debianといった主要な種類のLinuxのほとんどで、このsystemdが標準として採用されています。
2. サービスとプロセスを理解しよう
初心者の方が最初につまずくのが、「サービス」や「プロセス」という言葉の違いです。ここで簡単に整理しておきましょう。
- プロセス: 今、まさに実行されているプログラムのことです。例えば、ブラウザを開けば「ブラウザのプロセス」が動きます。
- サービス: ユーザーが直接操作しなくても、裏側でずっと待機して仕事をしてくれるプログラムのことです。メールを受信したり、Webサイトを表示したりする機能がこれに当たります。
systemdの役割は、この「サービス」を適切に管理することにあります。例えば、あなたがWebサイトを作るためのソフト(ApacheやNginxなど)をインストールしたとき、そのソフトを「常に動かしておいてね」とsystemdに頼むことになります。
3. systemdの主な特徴とメリット
systemdがなぜこれほど普及したのか、その大きな特徴を3つ紹介します。
① 起動がとにかく速い(並列起動)
昔の仕組みは、一つひとつのサービスを順番に並んで起動させていました。しかし、systemdは「準備ができたものから同時にどんどん起動する」という並列処理が得意です。そのため、パソコンやサーバーの立ち上がりが非常に速くなりました。
② 依存関係を賢く管理する
例えば「インターネットに繋がっていないと動けないサービス」があった場合、systemdは賢く判断して、先にネット接続の準備を終わらせてから、そのサービスを起動させます。この順番待ちの管理を自動でやってくれるのが強みです。
③ 落ちても自動で復活させてくれる
もし何かの拍子にサービスが壊れて止まってしまっても、systemdの設定次第で「あ、止まったな。よし、もう一度起動し直そう」と自動で復旧してくれます。これは、24時間動かし続けるサーバーにとっては非常に心強い機能です。
4. サービスの状況を確認する基本操作
それでは、実際にsystemdを使って、自分のパソコン(Linux)でどんなサービスが動いているか見てみましょう。使うコマンドはsystemctl(システム・コントロール)です。これは一般ユーザーでも実行できます。
まずは、現在動いているサービスの一覧を表示してみましょう。
systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
dbus.service loaded active running D-Bus System Message Bus
network.service loaded active running Network Service
ssh.service loaded active running OpenBSD Secure Shell server
このように、現在どのサービスが「ACTIVE(動いているか)」が一覧で表示されます。最初は難しく感じるかもしれませんが、「名前」と「状態」が並んでいるだけだと思えば大丈夫です。
5. 特定のサービスの状態を詳しく見る
すべてのサービスを眺めるのではなく、特定のサービス(例えば、Webサーバーやネットワーク管理など)が今どんな状態なのかを詳しく知りたいときがあります。その場合はstatusという命令を使います。
ここでは、例として「NetworkManager」というネットワークを管理するサービスの様子を覗いてみます。
systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2026-01-09 10:00:00 JST; 5h ago
Docs: man:NetworkManager(8)
実行結果の中にactive (running)という文字が見えますね。これは「元気に動いていますよ」という意味です。もしここが赤文字で「inactive」や「failed」となっていれば、何かトラブルが起きていることがわかります。初心者のうちは、まずこのstatusを見て「緑色の文字でactiveになっているか」を確認するだけでも大きな一歩です。
6. サービスを操作してみよう(起動と停止)
ここからは少し高度な操作になります。サービスの起動や停止は、システムの根本を変える操作なので、管理者(ルートユーザー)としての権限が必要です。コマンドの前にsudoをつけることで、「管理者の立場で実行します」と宣言します。
例えば、一時的にサービスを止めたいときはstopを使い、再び動かしたいときはstartを使います。Webサーバーのメンテナンスなどでよく使われる操作です。
sudo systemctl stop apache2
(何も表示されなければ成功です)
sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Active: inactive (dead)
上記の例では、Webサーバー(apache2)を一度停止させました。statusで確認するとinactive (dead)となり、お休み中であることがわかります。止めたものを動かすときは、stopの部分をstartに変えるだけです。
7. サーバー起動時に自動で動かす設定
Linuxを再起動したときに、毎回手動でサービスを立ち上げるのは大変ですよね。そこで、systemdには「パソコンをつけたら、このサービスも自動で起動してね」と予約する機能があります。これを「有効化(enable)」と呼びます。
逆に、自動で起動してほしくないときは「無効化(disable)」を使います。これは、セキュリティを高めたり、メモリを節約したりするために重要です。
sudo systemctl enable ssh
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
これで、次回の起動時からは自動的に「ssh」という遠隔操作用のサービスが立ち上がるようになります。「Created symlink(シンボリックリンクを作成しました)」というメッセージは、systemdが予約リストにそのサービスを登録した、という証拠です。
8. ログを確認してトラブルの原因を探す
もしサービスがうまく動かない場合、何が原因なのかを調べる必要があります。systemdは、各サービスが出した「日記」のような記録をすべて一箇所に集めて管理しています。この記録を「ログ」と呼び、確認するためのコマンドがjournalctl(ジャーナル・コントロール)です。
特定のサービスがどんなエラーを出しているか調べるときは、次のように入力します。
journalctl -u ssh.service
-- Logs begin at Wed 2026-01-01 09:00:00 JST, end at Fri 2026-01-09 15:00:00 JST. --
Jan 09 10:00:01 localhost sshd[123]: Server listening on 0.0.0.0 port 22.
Jan 09 10:05:12 localhost sshd[456]: Accepted password for user from 192.168.1.10
このように、何時何分に何が起きたかが時系列で表示されます。何か困ったことがあったら、ここを見ることで「パスワードが間違っていた」とか「設定ファイルが読み込めなかった」といったヒントを得ることができるのです。
9. ユニットという考え方(Unit)
最後に、systemdを理解する上で避けて通れない「ユニット(Unit)」という考え方について少しだけ触れておきます。systemdは、サービス以外にも、ハードウェアの認識やフォルダの自動接続(マウント)など、色々なものを管理しています。
これらをすべて共通の形式で扱えるようにしたものが「ユニット」です。ユニットには末尾に拡張子がついており、以下のような種類があります。
- .service: これまで説明してきた、普通のプログラム(サービス)。
- .target: 複数のユニットをグループ化したもの(Windowsでいう「セーフモード」や「通常起動」のような状態の切り替えに使います)。
- .timer: 「毎日○時に実行する」といった、タイマー予約のためのユニット。
このように、systemdは単なるサービスの起動係ではなく、Linuxのあらゆる要素を「ユニット」として統一的に管理している非常に強力なツールなのです。初心者のうちは、まずは.serviceから覚えて、徐々に他のユニットにも目を向けていくのが上達のコツです。