Ubuntu systemctlを使用したシステムの制御の正しい方法

サービスまたは一連のサービスを現代のLinux PCで管理するのは面倒ですが、何をしているのかわからない場合は特にです。Ubuntu SystemctlがLinux PC上のサービスを管理するための方法を提供しています。

このチュートリアルでは、異なるsystemctlコマンドを実行してUbuntu PC上のSystemdサービスを管理する方法を学びます。

準備はいいですか?掘り下げてみましょう!

前提条件

このチュートリアルは実演形式ですが、特別なツールは必要ありません。Ubuntu 16以上のバージョンであれば問題ありません。デモにはUbuntu 20.04.3 LTSバージョンが使用されています。

Ubuntu Systemctlとは何ですか?

Ubuntu systemctlコマンドを実行する前に、まずSystemctlが何であるかを知ってください。Systemctlは、systemdおよびシステムサービスを制御および管理するためのコマンドラインユーティリティです。

要するに、SystemctlはLinuxカーネルが起動した後にコンポーネントを初期化するためのsystemd initシステムのコントロールパネルまたはサービスマネージャーです。Systemctlは、サービスを管理するために使用できるライブラリ、デーモン、およびユーティリティのコレクションです。

サービスを効果的に管理するには、次のような異なるサービスの状態を知っておいてください:

  • 有効 – サービスがシステムの起動時に開始するように構成されていることを示します。
  • 無効 – サービスがシステムの起動時に開始しないように構成されていることを示します。
  • アクティブ – サービスが現在実行中であることを示します。
  • 非アクティブ – サービスが現在実行されていませんが、アプリケーションがそのサービスを開始しようとするときに開始される可能性があります。

すべてのサービスをリストする

これで、サービスの異なる状態を知ったので、おそらくUbuntu PCのすべてのサービスのリストを見たいと思うかもしれません。すべてのサービスをリストすることで、サービスの管理に備えた情報がいくつか提供されます。

ターミナルを開いて、以下のコマンドを実行して、サービスがユニットタイプとして設定されたすべてのサービスユニット(アクティブ、実行中、終了、または失敗)をリストします(list-units)(--type=service)。

systemctl list-units --type=service

このチュートリアルで後で管理したいリストからサービスの任意のユニット名(たとえば、apache2)を選択して、スペースバーを押して下にスクロールするか、「Q」キーを押してコマンドを終了します。

ところで、こちらはLinuxシェルスクリプトの良いガイドです。

Listing All Services (active, running, exited, or failed)

Listing Services with Specific State

すべてのサービスをリストする代わりに、おそらくサービスのリストを絞りたいと思うかもしれません。そうであれば、--state パラメータを追加すると、指定した特定の状態のサービスをフィルタリングします。

以下のいずれかのコマンドを実行して、すべてのアクティブなサービス(--type=service --state=active)をリストし、実行中のサービスと終了したサービスの両方を実行できます。

systemctl list-units --type=service --state=active
Listing Services on “active” State

同様に、終了したサービスまたは実行中のサービスのみをリストするには、状態の値をactiveからrunningまたはexitedに変更し、以下のコマンドに示されているようにします。

systemctl --type=service --state=running
systemctl --type=service --state=exited
Listing Services on “running” State
Listing Services on “stopped” State

Enabled Servicesのリスト

アクティブ、実行中、終了したサービスをリストするだけでなく、grepコマンドをパイプラインにして、有効および無効なサービスもリストできます。

以下のいずれかのコマンドを実行して、--type=serviceを使用してdisabledまたはenabledサービスをリストします。

## すべての有効なサービスをリストします
systemctl list-unit-files --type=service | grep enabled
## すべての無効なサービスをリストします
systemctl list-unit-files --type=service | grep disabled

手順に注意して、後でサービスの無効化に必要となる有効化されたサービスを以下に示しますが、このチュートリアルではデモにacpid.serviceを使用します。acpidは、Advanced Configuration and Power Interface (ACPI) イベントをサポートする拡張可能なデーモンです。

Listing Enabled Services

サービスのプロパティをリストする

サービスをリストするだけでなく、サービスのプロパティを確認することも役立ちます。サービスのプロパティを知ることは、トラブルシューティング、プロセスのパラメータ、または再起動の動作に対処するのに便利です。

以下のコマンドを実行して、サービス(acpid.service)のプロパティをkey=value形式でshowします。

systemctl show acpid.service
Showing Service Properties

今、特定のサービスのプロパティだけを探している場合は、プロパティ名を指定して-pフラグを渡すことができます。

以下のコマンドを実行して、サービス(acpid.service)のMainPIDプロパティをshowします。

systemctl show acpid.service -p MainPID
Showing Specific Service Property

特定のサービスの管理

サービスのリストを表示する基本が終わったので、特定の(単一の)サービスを管理する時が来ました。systemctl stopおよびstartコマンドを実行してください。

Apacheサービス(apache2)は以下のデモで使用されていますが、「すべてのサービスのリスト」セクションでメモしたサービスを自由に管理できます。ただし、サービスを停止または開始する前に、まずサービスの状態を確認する必要があります。

以下のコマンドをターミナルで実行して、apache2サービスの詳細な情報(statusなど)を表示します。

systemctl status apache2

下記では、apache2サービスがアクティブで実行中であることがわかります。

Viewing apache2 Service Status

サービスの状態を変更していないため、サービスのステータスを表示する際にはsudoパスワードの入力は必要ありません。ただし、サービスを開始、停止、または再起動する場合は、sudoコマンドを先頭に付けてsudoパスワードを入力する必要があります。

サービスの停止

おそらく、バックグラウンドで実行されているままになっているサービスを停止したい場合は、systemctl stopコマンドが必要です。以下のsystemctlコマンドを実行して、apache2サービスを停止します。

sudo systemctl stop apache2

複数のサービスを同時に停止する場合は、スペースで区切って各サービスを指定します。たとえば、sudo systemctl stop sshd apache2のようにします。このコマンドでは、sshdとapache2の両方のサービスを一度に停止します。

前述のように、apache2サービスが停止したかどうかを確認するためにsystemctl statusコマンドを実行してください。

systemctl status apache2

以下では、apache2サービスのステータスがinactive(dead)に変わったことがわかり、サービスが停止したことを示しています。

Verifying if apache2 Service is Stopped

サービスの開始

いま、サービスがまったく実行されていないことに気付いた場合、どのようにサービスを開始しますか? サービスを停止するコマンドに似たコマンド、つまりsystemctl startコマンドを実行します。 以下のコマンドを実行して、apache2サービスを開始します。

sudo systemctl start apache2

複数のサービスを停止する場合と同様に、1行のコマンドで複数のサービスを開始することもできます。 stopコマンドをstartコマンドに置き換えて、次のようにします: sudo systemctl start sshd apache2

今、systemctl statusコマンドをもう一度実行して、apache2サービスが実行されているかどうかを確認します。

systemctl status apache2

下のように表示されるactive (running)ステータスを見ると、サービスがビジネスに戻っているため、すべて設定されています。

Starting apache2 service

最初に停止する必要なく、サービスを直ちに再起動する場合は、systemctl restartコマンドを選択してください。次のようにしてください:sudo systemctl restart apache2

サービスの有効化または無効化

おそらく、システム起動時に開始または開始を防ぐのを好む特定のサービスがあります。 その場合、systemctl enableまたはdisableコマンドを実行するのが最適です。

enableサブコマンドは、システムのデフォルトの起動設定を構成するため、disableサブコマンドは、サービスをシステムの起動時に実行しないようにします。

「有効化されたサービスの一覧」セクションで確認したサービス(acpid.service)を「無効化」するために、以下のsystemctlコマンドを実行してください。コマンドの実行にはsudoパスワードが必要です。

sudo systemctl disable acpid.service
Disabling a Service

さて、acpid.serviceはOS-directed configuration and Power Management (OSPM)をサポートしているため、再び有効化する必要があります。サービスを有効化するコマンドは、サービスを無効化するのと似ています。

以下のsystemctlコマンドを実行して、acpid.serviceを「有効化」してください。このコマンドにより、サービスはシステムのデフォルトの起動設定に登録されます。

sudo systemctl enable acpid.service
Enabling a Service

まとめ

このチュートリアルでは、Ubuntuのsystemctlコマンドを実行することで、サービスの停止、開始、再起動をいかに素早く行えるかを確認しました。また、systemctlコマンドを使用することで、複数のサービスを同時に管理することも可能であることを学びました。

これらの新たな知識を活かして、Ubuntuシステムでサービスの制御を自動化してみませんか?

Source:
https://adamtheautomator.com/ubuntu-systemctl/