Linuxのサービス・systemd管理を徹底解説!初心者でもわかるサーバー運用の基本
生徒
「Linuxの勉強をしていると『サービス』っていう言葉をよく聞くんですけど、これって何のことですか?」
先生
「良いところに気づきましたね。Linuxにおけるサービスとは、パソコンが動いている間、裏側でずっとお仕事をしてくれているプログラムのことですよ。」
生徒
「裏側でお仕事?自分では操作していないのに勝手に動いているってことですか?」
先生
「その通りです!例えば、メールを受け取ったりWebサイトを表示したりするために、いつでも準備万端で待機してくれているんです。今回はその仕組みや管理方法を解説しますね。」
1. Linuxのサービスとは?
Linuxにおけるサービス(Service)とは、システムの裏側で常に動き続けているプログラムのことを指します。私たちが普段使っているブラウザやメモ帳のように、画面に見える形で操作するものではなく、見えないところで黙々と働いてくれる存在です。専門的な用語では、これらをデーモン(Daemon)と呼ぶこともあります。デーモンは「守護神」のような意味合いがあり、システムが正常に動くように見守ってくれているイメージです。
例えば、あなたがスマートフォンでWebサイトを見るとき、そのWebサイトのデータを提供しているコンピューター(サーバー)の中では、「Webサーバー」というサービスが24時間365日、誰かがアクセスしてくるのを待ち構えています。このように、「目には見えないけれど、特定の役割を持ってずっと動いているプログラム」がサービスなのです。プログラミング未経験の方であれば、お店の「店番」をイメージすると分かりやすいでしょう。お客さんがいつ来てもいいように、ずっとお店の中にいて準備をしているスタッフのような役割です。
Linuxには、ネットワークを管理するサービス、時間を正確に保つサービス、ログ(履歴)を記録するサービスなど、非常にたくさんのサービスが同時に動いています。これらを一括で管理しているのが、今回学習するsystemd(システムディー)という仕組みです。
2. systemdとsystemctlコマンドの役割
昔のLinuxでは、サービスの起動や停止の方法がバラバラで管理が大変でした。そこで登場したのがsystemdです。systemdは、現在の主要なLinux(UbuntuやCentOS、Debianなど)で採用されている「サービス管理の親玉」のようなプログラムです。コンピューターの電源を入れた直後に真っ先に起動し、他の全てのサービスを順番に立ち上げる重要な役割を担っています。
そして、私たちがこのsystemdに対して「このサービスを動かして!」「止めて!」と命令を出すときに使う道具が、systemctl(システムコントロール)というコマンドです。このコマンドを覚えるだけで、Linuxのあらゆるサービスを自由自在に操ることができるようになります。
サービスを管理する単位はユニット(Unit)と呼ばれますが、初心者のうちは「サービス名=ユニット名」と考えて問題ありません。例えば、Webサーバーならhttpdやnginx、メールサーバーならpostfixといった名前がついています。これらの名前を指定して、コマンドを実行していくことになります。
3. サービスの状態を確認してみよう
まずは、自分のコンピューターでどのようなサービスが動いているのか、状態を確認する方法を学びましょう。使うのはstatusという命令です。これを使うと、そのサービスが「今元気に動いているか(実行中)」それとも「お休み中か(停止中)」が一目でわかります。
まずは、多くのLinuxシステムで動いているネットワーク管理サービス「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 30min ago
Docs: man:NetworkManager(8)
Main PID: 1234 (NetworkManager)
Tasks: 3 (limit: 4656)
Memory: 10.5M
CGroup: /system.slice/NetworkManager.service
└─1234 /usr/sbin/NetworkManager --no-daemon
実行結果の中にactive (running)という文字が見えますね。これは「現在元気に動いていますよ」という意味です。もしここがinactive (dead)となっていれば、そのサービスは止まっていることを意味します。また、Main PIDというのは、そのプログラムに割り振られた背番号のようなものです。
4. サービスの起動と停止の基本操作
次に、サービスを手動で動かしたり止めたりする方法を解説します。これにはシステム全体の設定を変更する権限が必要になるため、root(ルート)ユーザー、またはsudoという特別な命令を使って実行します。rootユーザーとは、パソコンにおける「管理者」のことで、何でもできる最強の権限を持ったユーザーのことです。
例えば、一時的にWebサーバーなどのサービスを止めたいときはstop、動かしたいときはstartを使います。ここでは例として、ダミーのサービス名を使って書き方を見てみましょう。実際の操作では、停止させることでインターネットに繋がらなくなることもあるので、慎重に行う必要があります。
systemctl stop NetworkManager
(画面には何も表示されませんが、サービスが停止します)
サービスを止めた後に、もう一度先ほどのstatusコマンドで確認すると、状態がinactive (dead)に変わります。止まったサービスを再度動かすには、以下のコマンドを使います。
systemctl start NetworkManager
(これで再びサービスが動き出します)
このように、systemctl [命令] [サービス名]という形が基本のルールです。初心者の方は、まずはこの「起動」と「停止」のペアをセットで覚えましょう。設定を変更した後に設定内容を反映させたい場合は、一度止めてから動かすrestart(再起動)という便利な命令もあります。
5. 自動起動の設定(enableとdisable)
サービス管理で最も重要なのが自動起動の設定です。Linuxのサービスには、「パソコンの電源を入れたときに自動で動き出すもの」と「勝手には動かないもの」の2種類があります。例えば、サーバーとして使っているなら、停電などで再起動した後にWebサーバーが勝手に立ち上がってくれないと困りますよね。
この「自動で動くように予約する」命令がenableです。逆に「自動では動かないようにする」のがdisableです。これは先ほどのstartやstopとは意味が異なります。startは「今すぐ動かす」という意味ですが、enableは「今はどうあれ、次回パソコンをつけたときに動くようにしておく」という将来の予約なのです。
systemctl enable NetworkManager
Created symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service → /lib/systemd/system/NetworkManager.service.
このコマンドを実行すると、システムの中に「次からこれも一緒に起動してね」というメモ(シンボリックリンクといいます)が作成されます。これで、いちいち手動で起動させる手間が省けます。現在の設定がどうなっているか知りたいときは、is-enabledという命令を使うと確認できます。
6. サービスの一覧を表示して全体を把握する
自分のパソコンにどれくらいのサービスが存在しているのか、その全体像を確認してみましょう。一つずつ名前を調べるのは大変なので、一覧表示の機能を使います。これにはlist-unit-filesという少し長い命令を使います。このコマンドを使うと、インストールされている全てのサービスと、それらが「自動起動(enabled)になっているか」「無効(disabled)になっているか」がずらっと表示されます。
systemctl list-unit-files --type=service
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
bluetooth.service enabled enabled
cron.service enabled enabled
dbus.service static -
getty@.service enabled enabled
...
一覧が非常に長い場合は、キーボードの矢印キーで上下にスクロールでき、qキーを押すと元の画面に戻れます。初心者の方は、あまりの多さに驚くかもしれませんが、全部を覚える必要はありません。「こんなにたくさんのプログラムが裏で私のパソコンを守ってくれているんだな」と感じるだけで十分です。特定の名前が含まれるものだけを探したいときは、以前学習したgrepコマンドと組み合わせて使うのがプロの技です。
7. トラブル時に役立つログの確認(journalctl)
「サービスを起動しようとしたけれど、なぜかエラーになって動かない!」という場面は、Linuxを触っていると必ず遭遇します。そんなときに役立つのが、サービスの活動日記であるログを確認することです。systemdが管理しているサービスのログを見るには、journalctl(ジャーナルコントロール)というコマンドを使います。
特に、特定のサービスが失敗した理由を知りたいときは、-uオプションを使ってサービス名を指定します。これを見ることで、「設定ファイルに書き間違いがある」「必要なファイルが見つからない」といった具体的な原因を突き止めることができます。
journalctl -u NetworkManager
Jan 09 10:00:01 localhost NetworkManager[1234]: <info> [1704762001.123] manager: NetworkManager (version 1.32.12) is starting...
Jan 09 10:00:02 localhost NetworkManager[1234]: <info> [1704762002.456] device (eth0): state change: unmanaged -> unavailable
ログには、何時何分に何が起きたかが詳細に記されています。エラーが起きている箇所は赤文字で表示されることもあります。プログラミング未経験の方は難しく感じるかもしれませんが、エラーメッセージをそのままコピーしてインターネットで検索することが、問題解決への一番の近道です。この「ログを見る癖」をつけることが、初心者から脱却するための大きな一歩となります。
8. systemctlの主なコマンド操作まとめ表
最後に、これまで紹介したsystemctlコマンドの主な使い方を表にまとめました。これらさえマスターしておけば、初心者のサービス管理としては完璧です。日常的に使うのは上から5つくらいですが、一通り目を通しておきましょう。
| 命令(サブコマンド) | 役割・意味 | 実行例 |
|---|---|---|
| status | サービスの状態(動いているか)を確認する | systemctl status サービス名 |
| start | サービスを今すぐ起動する(要管理者権限) | sudo systemctl start サービス名 |
| stop | サービスを今すぐ停止する(要管理者権限) | sudo systemctl stop サービス名 |
| restart | サービスを再起動する(停止+起動) | sudo systemctl restart サービス名 |
| enable | パソコン起動時に自動で動くように設定する | sudo systemctl enable サービス名 |
| disable | 自動起動の設定を解除する | sudo systemctl disable サービス名 |
| is-active | 今動いているかだけをシンプルに答える | systemctl is-active サービス名 |
これらのコマンドを使いこなすことで、Linuxシステムを自分の思い通りにコントロールできるようになります。最初は「黒い画面に文字を打つのは怖い」と感じるかもしれませんが、コマンドは決まった形式で入力するだけなので、慣れてしまえばマウス操作よりもずっと楽に、そして素早く操作できるようになりますよ。まずはstatusコマンドで、自分のLinuxがどんな風に動いているかを眺めるところから始めてみてください。