systemctl一覧の完全ガイド:Linuxサービスの状態確認と管理方法を解説

目次

1. はじめに

Linuxを使っていると、「サービスの状態を確認したい」「起動しているプロセスを一覧で見たい」と思う場面が多々あります。そんなときに便利なのが、systemctl コマンドです。

このコマンドは、Linuxにおける起動システムおよびサービスマネージャである「systemd」に対応しており、サービス(ユニット)の状態確認、起動、停止、再起動、そして一覧表示など、幅広い機能を持っています。

特に「systemctl 一覧」という観点から見ると、現在アクティブなサービスだけでなく、無効化されたサービス、自動起動が設定されているものなど、さまざまな角度から全体の構成を把握することが可能です。

この章では、まず「systemctlとは何か」という基本的な部分を簡潔に整理し、この記事でどのようなことを学べるのかを説明していきます。

systemctlとは何か?

systemctl は、systemdベースのLinuxディストリビューションにおいて、サービスやターゲット、マウントポイントなど、さまざまな「ユニット」を制御・確認するための標準的なツールです。

たとえば、Apache(httpd)やSSHなどのサービスを起動・停止したり、それらの状態を一覧表示したりする際に使用されます。

systemdとsystemctlの関係

systemdは、Linuxの起動処理やサービス管理の中核を担う仕組みであり、古くから使われていた「SysVinit」や「Upstart」などに代わる存在です。そのsystemdと対話するためのコマンドラインツールが systemctl です。

つまり、systemdが司令塔だとすれば、systemctlはその司令を出す「オペレーター」のような役割を果たします。

この記事で学べること

本記事では、以下のような疑問に対する答えが得られます:

  • 現在実行中のサービス一覧を確認するにはどうすればいい?
  • 非アクティブなサービスも含めて一覧表示したい場合は?
  • サービスが自動起動されるかどうかを確認したいときは?
  • 一覧結果をどう読み取ればいいのか?

Linux初心者にも分かりやすいよう、コマンドの実行例や出力結果の見方も丁寧に解説しますので、ぜひ最後までお付き合いください。

2. systemctlでサービス一覧を表示する方法

Linuxのシステム管理において、サービスの一覧を素早く把握することは非常に重要です。systemctl コマンドを使えば、現在アクティブなサービスはもちろん、非アクティブなサービス、自動起動の設定状況なども簡単に確認することができます。

ここでは、主に以下の3つの観点から一覧表示の方法を解説していきます:

  • アクティブなサービスの一覧
  • 全サービスの一覧(非アクティブも含む)
  • サービスユニットファイルの一覧(起動設定を含む)

2.1 現在アクティブなサービスの一覧を表示する

まず最も基本的な使い方として、現在システム上で「起動中」のサービスを確認したい場合は、以下のコマンドを使用します。

systemctl list-units --type=service

このコマンドを実行すると、現在アクティブな(=動作中の)サービス一覧が表示されます。出力には以下のような項目が含まれています:

項目名意味
UNITサービスの名前(例: ssh.service)
LOADユニットファイルが読み込まれているかどうか
ACTIVEサービスが有効かどうか(例: active, inactive, failed)
SUBより詳細な状態(例: running, exited, dead)
DESCRIPTIONサービスの概要

この情報を使うことで、例えば「nginxが現在動作しているかどうか」「何が起動中なのか」といった状況把握が可能です。

2.2 非アクティブなサービスも含めて一覧表示する

標準の list-units では、現在アクティブなサービスしか表示されない点に注意が必要です。非アクティブなサービスも含めて確認したい場合は、--all オプションを追加しましょう。

systemctl list-units --type=service --all

このオプションを付けることで、「inactive」状態のサービスや、過去に一度も起動されていないサービスなども含めて一覧化できます。

さらに絞り込みたい場合は、--state= オプションを使用して、特定の状態だけを抽出することも可能です。

systemctl list-units --type=service --state=inactive

これにより、「停止中のサービスだけを確認したい」といったニーズにも柔軟に対応できます。

2.3 サービスユニットファイルの一覧を確認する

「現在どうなっているか」だけでなく、「どのサービスが有効化されていて、起動時に自動で動作するか」を確認したい場合には、次のコマンドを使います。

systemctl list-unit-files --type=service

このコマンドは、サービスのユニットファイル(設定情報)一覧を表示し、それぞれの有効/無効状態(enabled/disabledなど)を確認できます。

STATEの値意味
enabled起動時に自動的に有効化される
disabled起動時には有効化されず、手動で起動が必要
static他のユニットに依存して動作し、自身では有効/無効の設定ができない
masked明示的に無効化されており、起動そのものができない(保護されている)

この一覧を確認することで、「どのサービスが起動時に立ち上がるのか」「間違ってマスクしてしまったサービスがあるか」といったシステム全体の起動構成を視覚的に把握できます。

3. systemctlを使ったサービス管理の基本操作

systemctl コマンドは、サービスの状態を確認するだけでなく、起動や停止、再起動、起動時の有効・無効設定など、多くの管理操作に対応しています。ここでは、Linuxシステムの運用で頻繁に使われる基本的な操作方法を紹介します。

日常的なサーバ管理やトラブル対応において、これらの操作を自在に使いこなすことが重要です。

3.1 サービスを起動する

特定のサービスを手動で起動するには、以下のように start サブコマンドを使用します。

sudo systemctl start サービス名

たとえば、Apache(httpd)を起動したい場合:

sudo systemctl start httpd.service

このコマンドは即座にサービスを起動しますが、再起動後も維持したい場合は、後述の enable を併用する必要があります。

3.2 サービスを停止する

サービスを停止させるには、以下のコマンドを使用します。

sudo systemctl stop サービス名

例:

sudo systemctl stop sshd.service

停止したサービスは、次に明示的に start されるまで動作しません。

3.3 サービスを再起動する

設定変更後などにサービスを再起動したい場合は、次のコマンドが便利です。

sudo systemctl restart サービス名

例:

sudo systemctl restart nginx.service

再起動は、現在の状態にかかわらず、いったん停止→再度起動の動作が行われます。

3.4 サービスの状態を確認する

サービスの詳細な状態を確認するには、status サブコマンドを使用します。

systemctl status サービス名

例:

systemctl status mysql.service

このコマンドでは、現在のアクティブ状態、プロセスID(PID)、ログの要約などが表示され、トラブルシューティング時に特に役立ちます。

3.5 サービスの自動起動を有効化する

サービスを再起動時にも自動で有効化したい場合は、enable サブコマンドを使います。

sudo systemctl enable サービス名

例:

sudo systemctl enable docker.service

この設定により、次回のシステム起動時にサービスも自動的に起動します。

3.6 サービスの自動起動を無効化する

自動起動を解除したい場合は、disable コマンドを使います。

sudo systemctl disable サービス名

例:

sudo systemctl disable cups.service

これにより、起動時にはサービスが開始されなくなります。

3.7 自動起動の設定状態を確認する

現在そのサービスが有効(enabled)なのか、無効(disabled)なのかを確認するには、以下のように is-enabled を使います。

systemctl is-enabled サービス名

出力例:

enabled

この結果により、サービスの起動ポリシーを素早く把握できます。

4. systemctlの便利なオプションと応用テクニック

systemctl コマンドは、サービスの起動や停止といった基本操作だけでなく、より高度で便利な管理タスクにも対応しています。ここでは、少し応用的な機能や知っておくと便利なオプションについて紹介します。

これらのテクニックを活用することで、Linuxのサービス管理をさらに効率化できます。

4.1 サービスの依存関係を一覧表示する

Linuxでは、あるサービスが他のユニット(サービス・マウント・ターゲットなど)に依存しているケースがよくあります。その依存関係を確認するには、次のように list-dependencies を使用します。

systemctl list-dependencies サービス名

例:

systemctl list-dependencies nginx.service

このコマンドは、指定したサービスに関連するユニットを階層構造で表示します。起動順の調査や、あるユニットが間接的にどのサービスに影響を及ぼすかを分析する際に役立ちます。

4.2 ユニットファイルの内容を表示する

サービスの詳細設定を確認したい場合、直接ユニットファイル(.service ファイル)の中身を確認することも可能です。

systemctl cat サービス名

例:

systemctl cat ssh.service

このコマンドは、実際に読み込まれているユニットファイルのパスと内容を表示します。カスタマイズされているかどうか、どのような設定が行われているかを迅速に確認できます。

4.3 ユニットファイルをリロードする

ユニットファイルに手動で変更を加えたあと、systemctl にそれを反映させるには、daemon-reload を実行します。

sudo systemctl daemon-reexec

または、より一般的には:

sudo systemctl daemon-reload

この操作によって、systemdはユニットファイルの再読み込みを行い、以降の操作に反映されるようになります。設定ファイルを変更したのに反映されないと感じたときは、まずこのコマンドを試してみると良いでしょう。

4.4 ユニットの実行ログを確認する(補足)

なお、systemctl 自体ではありませんが、関連してサービスのログを確認するためには journalctl コマンドが便利です。

journalctl -u サービス名

例:

journalctl -u docker.service

サービス起動時のエラーや、再起動の履歴などを確認できるため、トラブルシューティングの第一歩として必ず押さえておきたいコマンドです。

5. よくあるトラブルとその対処法

systemctl を使ってサービスを管理していると、思った通りに動作しなかったり、エラーメッセージが表示されたりすることがあります。この章では、よくあるトラブルとその解決方法をわかりやすく解説します。

「サービスが起動しない」「状態確認しても原因が分からない」といったときに慌てず対応できるよう、最低限押さえておきたいポイントを紹介します。

5.1 サービスが起動しないときの確認ポイント

サービスを起動しようとしても、次のようなエラーが出る場合があります:

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

このようなときは、以下の順序で確認すると原因が特定しやすくなります:

  1. ステータス確認
   systemctl status サービス名
  1. エラーログの確認
   journalctl -xe
  1. ユニットファイルの再読み込み
    ユニットファイルを変更した直後などは、以下を実行して再読み込みしましょう。
   sudo systemctl daemon-reload
  1. ポート競合の確認
    すでに別のプロセスが同じポートを使っていないか、以下で確認できます。
   sudo netstat -tulnp | grep ポート番号

5.2 status コマンドでのエラーメッセージの読み方

systemctl status を実行すると、サービスの状態だけでなく、最後に出力されたログメッセージも併せて表示されます。たとえば:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
  Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)

このように、「Active: failed」「status=1/FAILURE」などの記載を見れば、サービスが失敗したこと、そしてどのプロセスがエラーを返したかが一目でわかります。

また、Loaded 行からはユニットファイルのパスも確認できるため、ファイルの編集対象もすぐに特定できます。

5.3 サービスが勝手に停止してしまう場合

サービスが一度は起動しても、すぐに落ちてしまう場合は、主に以下の原因が考えられます:

  • 設定ファイルの誤記
  • ポートの競合
  • 必須ファイルやディレクトリの欠如
  • 実行権限の不足

このようなケースでは、以下のような対応が有効です:

  • 設定ファイルを再確認し、nginx -tapachectl configtest などのツールで検証
  • journalctl -u サービス名 で詳細ログを追跡
  • 必要なディレクトリ(例:/var/run/xxx)が存在するか確認し、なければ作成

5.4 masked 状態で起動できないとき

systemctl start を実行しても、以下のようなエラーが出る場合:

Failed to start example.service: Unit example.service is masked.

これは、サービスが masked 状態(完全に無効化された状態)になっており、起動がブロックされているためです。これを解除するには、以下のように unmask を実行します。

sudo systemctl unmask サービス名

その後、start で起動できます。

6. まとめ

Linuxでのサービス管理は、日常的なシステム運用に欠かせない作業のひとつです。その中心的な役割を担うのが systemctl コマンドであり、「一覧表示」や「サービスの操作」を通じて、システム全体の状態を把握・制御することができます。

この記事では、「systemctl 一覧」をキーワードに、以下のポイントを丁寧に解説してきました:

systemctlコマンドでできること(復習)

  • サービス一覧の確認
  • 現在アクティブなサービスの表示(list-units --type=service
  • 非アクティブも含めた一覧(--all--state=オプション)
  • サービスユニットファイルの一覧と起動設定(list-unit-files
  • サービス操作の基本
  • 起動・停止・再起動・状態確認(start / stop / restart / status)
  • 自動起動の設定(enable / disable / is-enabled)
  • 応用操作とトラブル対処
  • 依存関係の確認、ユニットファイルの表示、設定の再読み込み
  • エラー時のログ調査とステータス確認による原因究明

サービス管理のベストプラクティス

  • 状態を確認してから操作する(必ず status を見る)
  • 自動起動の有無を把握する(is-enabled で確認)
  • 設定変更後は必ず daemon-reload を実行
  • トラブル時には journalctl でログをチェックする

Linuxの運用において、こうした地道な確認作業の積み重ねが、安定したサービス提供や障害対応のスピード向上につながります。

さらなる学習に向けて

もしこの記事を読んで「もっと深く学びたい」と感じた方は、以下のようなトピックにも進んでみると良いでしょう:

  • systemdのターゲット(runlevelとの違い)
  • タイマー(systemd-timer)による定期実行の設定
  • カスタムユニットファイルの作成と配置方法

7. よくある質問(FAQ)

ここでは、systemctl コマンドやサービス一覧に関して、読者からよく寄せられる質問とその答えをまとめています。基本操作に慣れてきた方も、確認として参考にしてください。

Q1. systemctlservice コマンドはどう違うのですか?

A1.
systemctl は systemd ベースのサービス管理コマンドであり、現代の多くのLinuxディストリビューション(Ubuntu、CentOS、Fedoraなど)で標準として採用されています。
一方、service は旧来の SysVinit システムで使われていたコマンドです。互換性のために残されていることもありますが、systemd 環境では systemctl を使うのが推奨されます。

Q2. list-unitslist-unit-files の違いは?

A2.

  • list-units現在ロードされているユニット(=起動中または過去に使われたユニット)を表示します。
  • list-unit-filesすべてのユニットファイルとその有効化状態(enabled / disabledなど)を一覧表示します。
    つまり、「今動いているもの」と「設定上どうなっているか」を使い分けるイメージです。

Q3. static 状態のサービスは起動できますか?

A3.
はい、static 状態のサービスも手動で start すれば起動できます。ただし enable して起動時に自動実行することはできません。
これは、static なサービスが他のユニットに依存して起動する設計になっているためです。

Q4. masked になっているサービスが起動できません。どうすれば?

A4.
masked 状態は「完全に無効化された」状態で、起動自体がブロックされています。まず以下のコマンドでマスクを解除してください:

sudo systemctl unmask サービス名

その後、start で起動できます。

Q5. GUIでサービスの状態を一覧表示する方法はありますか?

A5.
ディストリビューションによっては、gnome-system-monitorKSysGuardCockpit などのツールでGUI上からサービス状態を確認できるものもあります。
ただし、サービスの有効/無効切り替えなど高度な操作には、systemctl の使用が最も確実です。

Q6. ユニットファイルを自作したいのですが、どこに置けばよいですか?

A6.
一般的には /etc/systemd/system/ に配置します。編集後は以下を忘れずに実行してください:

sudo systemctl daemon-reload

その後、通常どおり startenable で管理可能です。

年収訴求