Systemdの基本: サービス、ユニット、ジャーナルの管理方法
Systemdは、現代のLinuxディストリビューションにおいて最も広く使用されている初期化システムおよびサービスマネージャーです。これは、システムのブート時に必要なすべてのプロセスとサービスを管理し、システムの状態を監視するための多くの機能を提供します。Systemdは、従来のSysVinitのような他の初期化システムに比べて優れたパフォーマンスや柔軟性を提供し、システム全体の管理を効率化します。

本記事では、Systemdの基本的な概念、サービスの管理方法、ユニット(Units)の理解、およびジャーナル(Journal)機能について詳しく説明します。
1. Systemdの概要
Systemdは、Linuxシステムの起動時にプロセスを管理するために使われるシステムおよびサービスマネージャーです。Systemdは、システムの起動順序を制御し、サービスやユニットを並列で起動することができます。これにより、従来の方法に比べてブート時間が短縮されるなどのメリットがあります。
Systemdは、以下の主なコンポーネントを提供します:
- ユニット(Units): サービス、ソケット、デバイス、マウントポイントなど、システム上で管理すべき各リソースを「ユニット」という単位で扱います。
- サービス(Services): サービスは、バックグラウンドで実行されるプログラムで、通常はデーモンプロセスを指します。
- ジャーナル(Journal): システムログを管理し、デバッグ情報やエラーメッセージを記録します。
2. ユニット(Units)の概念
ユニットは、Systemdが管理する基本的な単位です。ユニットは、システムのリソース(サービス、デバイス、マウントポイントなど)を表現します。ユニットにはいくつかの種類があり、それぞれに特有の機能と使用方法があります。
ユニットの種類
- サービスユニット(.service): バックグラウンドで実行されるサービスを管理します。例として、Webサーバーやデータベースサーバーなどが挙げられます。
- ターゲットユニット(.target): システムの特定の状態を定義するユニットです。例えば、
multi-user.target
やgraphical.target
などがあります。 - ソケットユニット(.socket): ソケットを管理します。サービスがソケットを通じて通信する場合、ソケットユニットが利用されます。
- デバイスユニット(.device): ハードウェアデバイスを管理するためのユニットです。これにより、デバイスがシステムに追加されたり削除されたりするときの動作を制御できます。
- マウントユニット(.mount): ファイルシステムのマウントポイントを管理するユニットです。
- スワップユニット(.swap): スワップ領域を管理するユニットです。
ユニットファイル
ユニットファイルは、ユニットの設定を記述したテキストファイルです。通常、これらのファイルは/etc/systemd/system/
ディレクトリに配置されます。ユニットファイルには、サービスの起動方法、依存関係、リソース制限などが記述されています。
ユニットファイルの基本的な構造は以下の通りです:
ini[Unit]
Description=My Example Service
After=network.target
[Service]
ExecStart=/usr/bin/my_service
Restart=always
[Install]
WantedBy=multi-user.target
[Unit]
セクションは、ユニットのメタデータや依存関係を定義します。[Service]
セクションは、サービスの実行方法や設定を定義します。ExecStart
で指定されたコマンドが実行されます。[Install]
セクションは、ユニットのインストールに関する情報を定義します。WantedBy
は、どのターゲットにユニットを組み込むかを指定します。
3. サービスの管理
Systemdを使用してサービスを管理するには、systemctl
コマンドを利用します。systemctl
は、ユニットの状態確認、開始、停止、再起動など、さまざまな管理操作を行うためのコマンドです。
サービスの開始、停止、再起動
-
サービスの起動:
php-templatesudo systemctl start <サービス名>.service
-
サービスの停止:
arduinosudo systemctl stop <サービス名>.service
-
サービスの再起動:
php-templatesudo systemctl restart <サービス名>.service
サービスの有効化と無効化
サービスを起動時に自動的に開始させるには、「有効化」します。逆に、起動時に自動的に開始しないようにするには「無効化」します。
-
サービスの有効化:
bashsudo systemctl enable <サービス名>.service
-
サービスの無効化:
bashsudo systemctl disable <サービス名>.service
サービスの状態確認
サービスの現在の状態を確認するには、次のコマンドを使用します:
luasudo systemctl status <サービス名>.service
これにより、サービスの起動状態、実行中か停止中か、エラーメッセージなどが表示されます。
4. ジャーナル(Journal)の使用
Systemdは、システムのログを管理するためにjournal
を使用します。これにより、システム全体のログを簡単に管理し、必要な情報を迅速に取得することができます。
ジャーナルログの表示
journalctl
コマンドを使用すると、Systemdジャーナルのログを表示できます。例えば、以下のコマンドでシステム全体のログを確認できます:
nginxsudo journalctl
特定のサービスのログを表示するには、サービス名を指定します:
php-templatesudo journalctl -u <サービス名>.service
ログのフィルタリング
journalctl
には、ログをさまざまな方法でフィルタリングする機能があります。例えば、ログを時間範囲で絞り込んだり、特定のキーワードを含むログを表示したりできます。
-
最近のログを表示:
nginxsudo journalctl --since "1 hour ago"
-
エラーログを表示:
csssudo journalctl -p err
ジャーナルのログ保存
Systemdのジャーナルは、デフォルトでメモリに保存され、システムの再起動時にクリアされます。しかし、ログをディスクに保存するように設定することもできます。これにより、システム再起動後もログを保持できます。設定ファイル/etc/systemd/journald.conf
を編集し、Storage=persistent
を設定することで、永続的なログ保存が可能になります。
5. まとめ
Systemdは、Linuxシステムの管理において非常に強力なツールです。ユニット(Units)を使用してサービスやシステムリソースを効率的に管理でき、ジャーナル(Journal)機能を使用してシステムログを効果的に管理することができます。systemctl
とjournalctl
コマンドを活用することで、サービスの管理とシステムの監視が非常に簡単になります。
Systemdの深い理解と適切な使用は、Linuxシステムの運用において重要なスキルとなります。