サービスまたは一連のサービスを現代の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
)。
このチュートリアルで後で管理したいリストからサービスの任意のユニット名(たとえば、apache2)を選択して、スペースバーを押して下にスクロールするか、「Q」キーを押してコマンドを終了します。
ところで、こちらはLinuxシェルスクリプトの良いガイドです。

Listing Services with Specific State
すべてのサービスをリストする代わりに、おそらくサービスのリストを絞りたいと思うかもしれません。そうであれば、--state
パラメータを追加すると、指定した特定の状態のサービスをフィルタリングします。
以下のいずれかのコマンドを実行して、すべてのアクティブなサービス(--type=service --state=active
)をリストし、実行中のサービスと終了したサービスの両方を実行できます。

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


Enabled Servicesのリスト
アクティブ、実行中、終了したサービスをリストするだけでなく、grep
コマンドをパイプラインにして、有効および無効なサービスもリストできます。
以下のいずれかのコマンドを実行して、--type=service
を使用してdisabled
またはenabled
サービスをリストします。
手順に注意して、後でサービスの無効化に必要となる有効化されたサービスを以下に示しますが、このチュートリアルではデモにacpid.serviceを使用します。acpidは、Advanced Configuration and Power Interface (ACPI) イベントをサポートする拡張可能なデーモンです。

サービスのプロパティをリストする
サービスをリストするだけでなく、サービスのプロパティを確認することも役立ちます。サービスのプロパティを知ることは、トラブルシューティング、プロセスのパラメータ、または再起動の動作に対処するのに便利です。
以下のコマンドを実行して、サービス(acpid.service
)のプロパティをkey=value形式でshow
します。

今、特定のサービスのプロパティだけを探している場合は、プロパティ名を指定して-p
フラグを渡すことができます。
以下のコマンドを実行して、サービス(acpid.service
)のMainPID
プロパティをshow
します。

特定のサービスの管理
サービスのリストを表示する基本が終わったので、特定の(単一の)サービスを管理する時が来ました。systemctl stop
およびstart
コマンドを実行してください。
Apacheサービス(apache2)は以下のデモで使用されていますが、「すべてのサービスのリスト」セクションでメモしたサービスを自由に管理できます。ただし、サービスを停止または開始する前に、まずサービスの状態を確認する必要があります。
以下のコマンドをターミナルで実行して、apache2
サービスの詳細な情報(status
など)を表示します。
下記では、apache2サービスがアクティブで実行中であることがわかります。

サービスの状態を変更していないため、サービスのステータスを表示する際にはsudoパスワードの入力は必要ありません。ただし、サービスを開始、停止、または再起動する場合は、sudoコマンドを先頭に付けてsudoパスワードを入力する必要があります。
サービスの停止
おそらく、バックグラウンドで実行されているままになっているサービスを停止したい場合は、systemctl stop
コマンドが必要です。以下のsystemctl
コマンドを実行して、apache2
サービスを停止します。
複数のサービスを同時に停止する場合は、スペースで区切って各サービスを指定します。たとえば、
sudo systemctl stop sshd apache2
のようにします。このコマンドでは、sshdとapache2の両方のサービスを一度に停止します。
前述のように、apache2サービスが停止したかどうかを確認するためにsystemctl status
コマンドを実行してください。
以下では、apache2サービスのステータスがinactive(dead)に変わったことがわかり、サービスが停止したことを示しています。

サービスの開始
いま、サービスがまったく実行されていないことに気付いた場合、どのようにサービスを開始しますか? サービスを停止するコマンドに似たコマンド、つまりsystemctl start
コマンドを実行します。 以下のコマンドを実行して、apache2
サービスを開始
します。
複数のサービスを停止する場合と同様に、1行のコマンドで複数のサービスを開始することもできます。
stop
コマンドをstart
コマンドに置き換えて、次のようにします:sudo systemctl start sshd apache2
今、systemctl status
コマンドをもう一度実行して、apache2
サービスが実行されているかどうかを確認します。
下のように表示されるactive (running)ステータスを見ると、サービスがビジネスに戻っているため、すべて設定されています。

最初に停止する必要なく、サービスを直ちに再起動する場合は、
systemctl restart
コマンドを選択してください。次のようにしてください:sudo systemctl restart apache2
サービスの有効化または無効化
おそらく、システム起動時に開始または開始を防ぐのを好む特定のサービスがあります。 その場合、systemctl
enable
またはdisable
コマンドを実行するのが最適です。
enable
サブコマンドは、システムのデフォルトの起動設定を構成するため、disable
サブコマンドは、サービスをシステムの起動時に実行しないようにします。
「有効化されたサービスの一覧」セクションで確認したサービス(acpid.service)を「無効化」するために、以下のsystemctl
コマンドを実行してください。コマンドの実行にはsudoパスワードが必要です。

さて、acpid.serviceはOS-directed configuration and Power Management (OSPM)をサポートしているため、再び有効化する必要があります。サービスを有効化するコマンドは、サービスを無効化するのと似ています。
以下のsystemctl
コマンドを実行して、acpid.service
を「有効化」してください。このコマンドにより、サービスはシステムのデフォルトの起動設定に登録されます。

まとめ
このチュートリアルでは、Ubuntuのsystemctl
コマンドを実行することで、サービスの停止、開始、再起動をいかに素早く行えるかを確認しました。また、systemctl
コマンドを使用することで、複数のサービスを同時に管理することも可能であることを学びました。
これらの新たな知識を活かして、Ubuntuシステムでサービスの制御を自動化してみませんか?