このレッスンでは、init システムを制御する主要ツールであるsystemctlを使用した systemd ユニットファイルの基本的な概要と管理方法を提供します。ユニットファイルの基本構造と、Linux サービスを管理するための必須コマンドについて説明します。
Systemd ユニットファイルの理解
Systemd ユニットファイルは、systemd が管理できるサービス、マウントポイント、デバイス、またはその他のリソースを記述するプレーンテキストファイルです。foobar.serviceという名前のサービスユニットファイルの基本例を以下に示します。
[Unit]
Description=My Foobar Service
After=network.target
[Service]
ExecStart=/usr/bin/foobar
[Install]
WantedBy=multi-user.target
このシンプルなサービスファイルはセクションに分かれています。
- [Unit]: このセクションには、メタデータと依存関係情報が含まれます。
Descriptionはユニットの人間が読める名前を提供します。AfterやBeforeのようなディレクティブは起動順序を制御し、ネットワークが利用可能になった後にこのユニットが起動するようにします。 - [Service]: このセクションでは、サービスの管理方法を定義します。
ExecStartディレクティブは、サービスを起動するために実行するコマンドを指定するため、非常に重要です。ExecStopやExecReloadなどの他のディレクティブは、サービスを停止またはリロードする方法を定義できます。 - [Install]: このセクションでは、
systemctlでユニットが有効化または無効化されたときの動作を定義します。WantedByディレクティブは、標準的な非グラフィカルブートのためのmulti-user.targetなど、特定のターゲットの一部としてこのサービスを起動するように systemd に指示します。
これは systemd ユニットファイルの一端にすぎません。より高度な設定については、このトピックに関するさらなる調査を強くお勧めします。
必須の Systemctl コマンド
次に、systemd ユニットと対話し、Linux サービスを管理するために使用する必須のsystemctlコマンドを見ていきましょう。
Systemd ユニットの一覧表示
systemd が現在管理しているすべての稼働中のユニットを確認するには、list-unitsコマンドを使用します。
systemctl list-units
ユニットの状態確認
特定のユニットの詳細な状態(アクティブかどうか、有効になっているか、最新のログエントリなど)を表示するには、statusコマンドを使用します。
systemctl status networking.service
サービス状態の管理
start、stop、restartを使用して、サービスの実行時状態を制御できます。
サービスを即座に起動するには:
sudo systemctl start networking.service
実行中のサービスを停止するには:
sudo systemctl stop networking.service
サービスを停止してから再度起動するには:
sudo systemctl restart networking.service
サービスの有効化と無効化
サービスを有効化すると、起動プロセスにフックするためのシンボリックリンクが作成され、自動的に起動するようになります。無効化すると、そのリンクが削除されます。
サービスをブート時に起動するように有効化するには:
sudo systemctl enable networking.service
サービスをブート時の起動から無効化するには:
sudo systemctl disable networking.service
これらのコマンドは、最新の Linux システムにおけるサービス管理の構成要素です。これらを習得することは、Linux の道のりにおける重要な一歩です。